day-11.2 setTimeout代替setInterval

为什么会有setTimeout代替setInterval的需求;

setInterval,每隔一段时间往队列里塞一个可执行函数;当setInterval设置的时间间隔小于函数执行的事件,或者因为电脑内存等原因,导致处理卡机了,事件超过了,但是上一个函数没执行完,setInterval就往队列里面再塞一个函数的时候,

会导致执行顺序混乱;或者就算前一个函数能正常执行完,但是函数执行是需要时间的,setInterval是忽略函数执行时间,只关注间隔时间往队列里塞函数;所以即使前一个函数执行完,但是所剩给下一个函数执行的时间间隔已经不多了;

所以就有一个需求;

就是上一个函数执行完之后,再往执行队列里去塞下一个要执行的函数;这样就能避免队列混乱,正是因为有这个需求,所以就需要用setTimeout代替setInterval;

示例:

1 setTimeout(fn,10); //setTimeout 执行一遍
2 function fn (){
3   //...code  
4   setTimeout(fn,10);    //函数执行完后再setTimeout执行一遍自身;造成循环;
5 }

终止循环,方法很多,比如下例的return;

1 setTimeout(fn,10);
2 function fn (){
3   //...code  
4   if(//..判断){
5   return; //这里判断满足某一个条件的时候,return;终止循环;  
6 }else{
7   setTimeout (fn,10);
8     } 
9 }

 

posted @ 2018-06-19 12:58  bibiguo  阅读(150)  评论(0)    收藏  举报