<强>期望:>强开始输出一个0,然后每隔一秒依次输出1,2,3,4。
(var=0;我& lt;5;我+ +){ setTimeout(函数(){ console.log(我); },1000 *我); }
结果:输出5 .
原因:setTimeout使函数延迟1 s执行,而对循环执行完成还不到0.1秒,到执行函数的时候,其实我已经变成5了,因此console.log (i)输出5 .
(让我=0;我& lt;5;我+ +){ setTimeout(函数(){ console.log(我); },1000 *我); }
(var=0;我& lt;5;我+ +){ (函数(i) { setTimeout(函数(){ console.log(我); },1000 *我); })(); }
结果:开始输出一个0,然后每隔一秒依次输出1,2,3,4。
失败方法:
(var=0;我& lt;5;我+ +){ (函数(){ setTimeout(函数(){ console.log(我); },1000 *我); }) (); }
结果:输出5 .
原因:去掉函数的参数,则函数内部没有对我保持引用。
(var=0;我& lt;5;我+ +){ setTimeout((函数(i) { console.log(我); })(我),我* 1000); }
结果:立马输出0 - 4。
原因:setTimeout可以接受函数或者字符串作为参数,而给setTimeout传递了一个立即执行函数,该立即执行函数是未定义的,也就是说等价于setTimeout(定义,…)。立即执行函数会立即执行。
以上这篇解决循环中setTimeout执行顺序的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。