this.config = {
source: psource,
_events: [
'value1',
'value2',
'value3'
]
};
// Add callbacks to source
var that = this;
for (var i = this.config._events.length - 1; i >= 0; i--) {
var name = this.config._events[i];
console.log(name); // correct
$(this.config.source).on(name, function() {
console.log(name); // value1
console.log(that.config._events[i]); // undefined
});
}
我看不出这里有什么问题。我删除了所有复杂的版本,并放入最简单的版本,它根本不想工作。第一个console.log
正确输出所有正确的名称,但它的行为像循环一次发生,然后再次为内部console.log
的。闭环影响循环中闭合函数中的变量
任何人都可以看到有什么问题吗?
声明“闭包正在影响所有事情,而不仅仅是这一点”并未描述问题 - 闭包如何工作。封闭范围中的所有变量都包含在闭包中。 – nrabinowitz 2012-03-15 18:25:41
请使用更具描述性的内容修改问题的标题。我认为你应该提到术语'for循环' – viebel 2012-03-15 18:37:04
重复http://stackoverflow.com/questions/2192348/closures-in-a-for-loop – viebel 2012-03-16 10:56:56