我认为这个问题以前曾被问过,但我无法找到答案,也许我缺乏合适的词语来描述我的问题。
我有一个循环,每次迭代我都会创建一个对象,并添加一个事件监听器,该事件监听器的回调函数使用创建的对象。
for(var i in items)
{
x = new SomeClass(i)
someAPI.event.addListener(i, 'click', function(ev){
x.someMethod()
});
}
发生了什么,我明白为什么,事件函数定义中的变量 x
仅在事件触发时才会计算,并且 x
等于最后一个受此名称影响的值,这是上次迭代时给出的值。
我想知道如何获得所需的行为,即在事件函数定义内的循环中获取 x
的当前值。
谢谢。
最佳答案
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
的值恒定并在每次迭代时创建一个新的范围。
关于javascript - 更新javascript中事件函数中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20069672/