循环JS变量不会在函数内显示正确的值

时间:2013-10-10 17:38:43

标签: javascript jquery jquery-mobile cordova

我需要做以下任务。但是这总是仅警告“5”而不是1,2,3,4和5.我该如何解决这个问题?请帮忙。

    for(var x=1; x<=5; x++){
        something.load(function(result){
            alert(x);
        });
    }

1 个答案:

答案 0 :(得分:9)

这是由于关闭。运行回调时,它将以当前状态警告变量(因此在循环之后)。

要解决此问题,您可以创建一个新的闭包,它将保持变量状态。

for(var x=1; x<=5; x++){
    (function(x) {
        something.load(function(result){
            alert(x);
        });
    }(x));
}

有关Closure的更完整说明,您可以参考此SO问题:How do JavaScript closures work?

或者本文由TC39(EcmaScript标准组织)http://www.2ality.com/2013/05/quirk-closures.html

的成员撰写