这是代码

var _d=1000;
for(var ii=0; ii<4; ii+=1){
    console.log(_d*ii);
    window.setTimeout(applyState(ii,_d),_d*ii);
}

我希望applyState()函数被调用4次,它们之间有1秒的延迟,真正发生的是一次调用了所有函数。

最佳答案

()运算符调用函数,您应该传递函数本身,否则函数的返回值将传递给setTimeout函数。但这不能完全解决问题。 for块不会创建新的作用域。您可以使用自调用功能:

var _d=1000;
for(var ii=0; ii<4; ii+=1){
    (function(a) {
         console.log(_d * a);
         window.setTimeout(function() {
            applyState(a,_d);
          },_d*a);
    })(ii);
}

关于javascript - window.setTimeout无法读取正确的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25425732/

10-11 23:46