我认为这个问题之前已被问到,但我无法找到答案,也许我缺乏描述问题的好词。
我有一个循环,其中,每次迭代我创建一个对象,然后我添加一个事件监听器,回调函数使用创建的对象。
for(var i in items)
{
x = new SomeClass(i)
someAPI.event.addListener(i, 'click', function(ev){
x.someMethod()
});
}
发生了什么,我理解为什么,事件函数定义中的变量x
仅在触发事件时被评估,并且x
等于受影响的最后一个值这个名字,是最后一次迭代时给出的值。
我想知道如何在事件函数定义中获取所需行为,即在循环中获取x
的当前值。
感谢。
答案 0 :(得分:2)
for(var i in items) {
(function(j) {
var x = new SomeClass(j);
someAPI.event.addListener(j, 'click', function(ev){
x.someMethod()
});
})(i);
}
关键是var
关键字,在每次迭代时创建一个新的类实例
我添加了IIFE以保持i
的值不变并在每次迭代时创建一个新范围。