用javascript更新事件函数中的全局变量

Update global variable in event function in javascript

本文关键字:全局变量 函数 事件 javascript 更新      更新时间:2023-09-26

我想以前有人问过这个问题,但我找不到答案,也许我缺乏描述问题的好词。

我有一个循环,在这个循环中,每次迭代我都会创建一个对象,并添加一个事件侦听器,该事件侦听器的回调函数使用创建的对象。

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的值不变,并在每次迭代中创建一个新的范围。