循环JS变量在函数内未显示正确的值。

13 浏览
0 Comments

循环JS变量在函数内未显示正确的值。

这个问题已经有答案了

JavaScript循环中的闭包-简单实际例子

JavaScript不支持具有局部变量的闭包?[重复]

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

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

admin 更改状态以发布 2023年5月22日
0
0 Comments

这是由于闭包造成的。当回调函数被执行时,它会警报变量的当前状态(因此在循环之后)。

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

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

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

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

0