2

我需要执行以下任务。但这总是只提醒“5”而不是 1、2、3、4 和 5。我该如何解决这个问题?请帮忙。

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

1 回答 1

9

这是由于关闭。当回调运行时,它会提醒变量处于其当前状态(所以在循环之后)。

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

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

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

或者这篇文章来自 TC39(EcmaScript 标准机构)的成员http://www.2ality.com/2013/05/quirk-closures.html

于 2013-10-10T17:40:24.863 回答