相关疑难解决方法(0)

使用自调用函数是变量独立的

可能重复:
循环内部的Javascript闭包 - 简单实用的例子

我正在尝试使用自调用函数,以便每个函数都objects将返回不同的消息.

<script type="text/javascript">

    objects = {};

    for( var i = 0; i < 10; i++ ) {

        objects['function'+i] = function () {

            var text = ( function() { return "I am object " + i; } )();

            return text;

        };

    }

    for( var j = 0; j < 10; j++ ) {

        document.write( objects['function'+j]() + "<br>" );

    }

</script>
Run Code Online (Sandbox Code Playgroud)

到目前为止,上述结果如下:

我是对象10

我是对象10

我是对象10

我是对象10

我是对象10

我是对象10

我是对象10

我是对象10

我是对象10

我是对象10

如何使用自调用函数立即设置消息而不是与不稳定的事情联系在一起i

javascript self-invoking-function self-executing-function

4
推荐指数
1
解决办法
553
查看次数

javascript如何在回调函数中得到this.variable

在javascript中的以下自定义类中,在回调中,为什么this.obj什么都没有,但局部变量obj有我想要的东西?谢谢.

function ClassTest(director) {
  this.obj = {"test1": "test1"};
}

function test1(input, callback) {
  callback("success");
}

ClassTest.prototype.test = function() {
  var obj = this.obj;
  test1("niuniu",function(e){
    console.log(this.obj);  // undefined
    console.log(obj);  // this one has stuff
    });
}

// run 
new ClassTest().test()
Run Code Online (Sandbox Code Playgroud)

javascript callback

4
推荐指数
1
解决办法
6326
查看次数

闭包语法

function makeIncreaseByFunction(increaseByAmount) {
  return function (numberToIncrease) {
    return numberToIncrease + increaseByAmount;
  };
}

makeIncreaseByFunction(3)(10);
Run Code Online (Sandbox Code Playgroud)

为Clarity更新了 有人可以解释为什么(3)(10)的写法是这样的吗?我知道10是作为内部函数的参数提供的,但为什么语法上会这样注明?如果我们有三个嵌套函数,那么参数总是按照(3)(10)(20)中的顺序写出来吗?

javascript

4
推荐指数
1
解决办法
451
查看次数

Javascript范围未定义

关于javascript范围的jquery网站的在线文档我有问题.有代码;

(function() {

var baz = 1;

var bim = function() {
    console.log( baz );
};

bar = function() {
    console.log( baz );
};

})();
Run Code Online (Sandbox Code Playgroud)

并说:

console.log( baz ); // baz is not defined outside of the function
Run Code Online (Sandbox Code Playgroud)

我不明白的是,即使baz已定义,为什么console.log(baz)未定义.因为我认为范围是一样的.我错过了什么?

javascript scope

4
推荐指数
1
解决办法
147
查看次数

ExtJS列渲染器

我的问题是ExtJS 4中GridPanel中列的渲染器功能.渲染器的记录应该从我的商店加载我的列表元素,它确实如此; 但它总是加载列表中的相同元素.

以下是我的代码的相关摘要.

首先是我的商店:

var nStore = Ext.create('Ext.data.Store', {
    storeId: 'people',
    fields: ['team', 'name', 'liste', 'sums'],
    data: [{
        team: 'TestTeam', name: 'TestPerson',
        liste: ['F', 'F', 'F', 'S', 'N', 'F', 'S',
            'S', 'S', 'F', 'F', 'F', 'S', 'A', 'N',
            'S', 'S', 'S', 'S', '', '', 'N', 'N',
            'N', 'S', 'S', 'N', 'S', 'F', 'N', 'N'],
        sums: [[7, 4, 0, 0, 0, 0, 0], [3, 0, 0, 0, 0]]
    }]
});
Run Code Online (Sandbox Code Playgroud)

然后是渲染器所在的列数组:

var counter = 0;
for (var i = 0; …
Run Code Online (Sandbox Code Playgroud)

javascript renderer extjs4

4
推荐指数
1
解决办法
497
查看次数

使用Ember,mixin检测视图/组件外部的单击

我正在编写一个Mixin来处理用户在视图/组件外部点击的时间.

这是混合:

App.ClickElsewhereMixin = Ember.Mixin.create({

  onClickElsewhere: Ember.K,

  didRender: function() {
    this._super.apply(this, arguments);
    return $(document).on('click', this.get('onClickElsewhere'));
  },

  willDestroyElement: function() {
    this._super.apply(this, arguments);
    $(document).off('click', this.get('onClickElsewhere'));
  },
});
Run Code Online (Sandbox Code Playgroud)

我在我的组件中使用它:

onClickElsewhere: function() {
    this.send('exitEditMode');
},
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,我得到:

TypeError: this.send is not a function
Run Code Online (Sandbox Code Playgroud)

我怎样才能保持this背景?


解:

只是为了让读者更容易,在这里工作的Mixin:

App.ClickElsewhereMixin = Ember.Mixin.create({

  onClickElsewhere: Ember.K,

  setupListener: Ember.on('didRender', function() {
    // Set an event that will be fired when user clicks outside of the component/view
    return $(document).on('click', $.proxy(this.get('onClickElsewhere'), this));
  }),

  removeListener: Ember.on('willDestroyElement', function() {
    // Clean the previously …
Run Code Online (Sandbox Code Playgroud)

ember.js

4
推荐指数
2
解决办法
3576
查看次数

克隆JavaScript对象 - 包括Getters和Setter

在我正在进行的项目中,我不得不将对象克隆到变量中.
我第一次尝试 - 似乎是最明显的解决方案 - var obj2 = obj1然而我很快意识到这使得obj2 引用 obj1,所以每当我在obj2中设置属性时,属性也会在obj1中更新.好吧,我不能那样.所以,我开始寻找在JavaScript中克隆对象的方法 - 我发现了多个解决方案,主要是
var obj2 = JSON.parse(JSON.stringify(obj1))- 但这并没有保留我为我的对象定义的所有getter和setter!
对我来说现在最明显的解决方案似乎首先使用上面的JSON技巧使obj2具有所有obj1的属性,然后循环遍历所有对象getter和setter并使用它们添加它们Object.defineProperty(),但我还没有找到一种方法来获取一个对象的所有getter/setter.

javascript javascript-objects

4
推荐指数
1
解决办法
2710
查看次数

onmouseover不起作用,函数未定义

我有一个图标,需要将它所在的密码字段放入文本字​​段,反之亦然.

<i class="password_icon fa fa-unlock" aria-hidden="true" onmouseover="mouseOverPassword()" onmouseout="mouseOutPassword()"></i>
Run Code Online (Sandbox Code Playgroud)

但当我将鼠标悬停在图标上时,它表示:

Uncaught ReferenceError: mouseOutPassword is not defined
at HTMLElement.onmouseout ((index):1)
Run Code Online (Sandbox Code Playgroud)

即使它们在我包含的.js文件中:

function mouseOverPassword() {
    var obj = $("#passworldField");
    obj.type = "text";
}
function mouseOutPassword() {
    var obj = $("#passworldField");
    obj.type = "password";
}'
Run Code Online (Sandbox Code Playgroud)

这些函数位于$(document).ready函数中.我无法真正找出它为什么不起作用.是的,.js包含在页面上.

html javascript jquery

4
推荐指数
1
解决办法
2926
查看次数

为什么在函数执行结束后,函数创建并返回的对象仍然存在?

我读到每个函数都有自己的堆栈,这意味着当函数结束时,它的变量不再保留在内存中.我还读到对象是通过引用返回的.

考虑这个例子:

function getObject() {
 var obj = {name: "someName"};
 return obj;
} //At the end the locals should disappear


var newObj = getObject();// Get reference to something that is no longer kept in the stack,
console.log(newObj);//
Run Code Online (Sandbox Code Playgroud)

因此,如果函数返回的值是 不再存在的对象的引用(在堆栈中),我们如何仍然获得正确的值?在C(语言)中返回指向局部变量的指针是疯狂的.

javascript memory-management

4
推荐指数
1
解决办法
41
查看次数

XHR在onreadystatechange中获取请求URL

有没有办法在"onreadystatechange"方法中获取请求的URL?

我想运行多个XHR请求并知道它们中的哪一个回来:

xhr.open("GET", "https://" + url[i], true);
xhr.onreadystatechange = function(url) {
    console.log("Recieved data from " + url);
};
xhr.send();
Run Code Online (Sandbox Code Playgroud)

javascript ajax xmlhttprequest

3
推荐指数
1
解决办法
7853
查看次数