这是代码
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秒的延迟,真正发生的是所有的都被立即调用。
答案 0 :(得分:3)
()
运算符调用该函数,您应该传递函数本身,否则函数的返回值将传递给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);
}
答案 1 :(得分:0)
你需要将一个函数传递给setTimeout,你当前正在传递applyState(ii,_d)的返回值
试
window.setTimeout(function(){applyState(ii, _d);}, _d*ii)
除非applyState实际上不需要参数,在这种情况下你可以使用
window.setTimeout(applyState, _d*ii)