解决循环中setTimeout执行顺序的问题

  

<强>期望:强开始输出一个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执行顺序的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

解决循环中setTimeout执行顺序的问题