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 }
浙公网安备 33010602011771号