关于javascript:循环JS变量没有在函数内显示正确的值

Looping JS variable doesn't show the correct value inside the function

本问题已经有最佳答案,请猛点这里访问。

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

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


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

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

1
2
3
4
5
6
7
for(var x=1; x<=5; x++){
    (function(x) {
        something.load(function(result){
            alert(x);
        });
    }(x));
}

有关Closure的更完整说明,您可以参考这个问题:JavaScript闭包如何工作?

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