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

时间:2013-11-19 10:59:48

标签: javascript events variables loops scope

我认为这个问题之前已被问到,但我无法找到答案,也许我缺乏描述问题的好词。

我有一个循环,其中,每次迭代我创建一个对象,然后我添加一个事件监听器,回调函数使用创建的对象。

for(var i in items)
{
    x = new SomeClass(i)

    someAPI.event.addListener(i, 'click', function(ev){
        x.someMethod()
    }); 
}

发生了什么,我理解为什么,事件函数定义中的变量x仅在触发事件时被评估,并且x等于受影响的最后一个值这个名字,是最后一次迭代时给出的值。

我想知道如何在事件函数定义中获取所需行为,即在循环中获取x的当前值。 感谢。

1 个答案:

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