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
执行。
有人能看出什么问题吗?
答案 0 :(得分:2)
在那个区块中
console.log(that.config._events[i]); // undefined
i
最终都会为-1。
您必须执行某种操作才能在i
$(this.config.source).on(name, function(i) { return function() {
console.log(name); // value1
console.log(that.config._events[i]); // undefined
};
}(i) );
答案 1 :(得分:-1)
在Javascript中,不建议在for
循环中定义函数。
相反,您应该使用提供each
的javascript库,例如underscore
。然后你的代码将如下所示:
_.each(this.config._events, function(e) {
$(this.config.source).on(name, function() {
console.log(e);
});
您可能希望在之前反转数组。
你也可以使用提供类似界面的jQuery $.each
。