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

标签 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 的当前值。 谢谢。

最佳答案

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/

相关文章:

Javascript正则表达式用于按空格分割重音字符

javascript - 通用 Javascript 事件

javascript - 如何在 asp :TextBox 的 keyup 事件上调用 javascript 函数

变量内容意外改变?

javascript - 使用 javascript 在 url 中添加/修改查询字符串/GET 变量

javascript - 如何在 BokehJS 中使用 CustomJS?

javascript - 无法使用 for 循环追加子项

javascript - knockout.js 中的事件处理程序模型更改

javascript - 文本选择和冒泡

php - 在不使用 GET 参数的情况下将 javascript 变量传递到 php 代码中?