【问题标题】:Update global variable in event function in javascript在javascript中更新事件函数中的全局变量
【发布时间】:2013-11-19 10:59:47
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: javascript events variables loops scope


    【解决方案1】:
    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 的值不变并在每次迭代时创建一个新范围。

    【讨论】:

    • 谢谢,它运行良好。实际上,我在我的代码中使用了 var 关键字(在我的代码示例中缺少),但我的代码中缺少的是 IIFE。
    • @ibi0tux - 没问题!
    猜你喜欢
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    相关资源
    最近更新 更多