使用setTimeout()方法来模拟setInterval()与直接使用setInterval()有什么区别?

setTimeout(fn, time),超时调用,在时间大于等于 time  时调用;

setInterval(fn, time),是间歇调用,每隔 time 调用一次。

使用setInterval()创建的定时器确保了定时器代码规则地插入队伍中。问题在于:如果定时器代码在代码再次添加到队列之前还没完成执行,结果就会导致定时器代码连续运行好几次。而之间没有间隔。不过幸运的是:javascript引擎足够聪明,能够避免这个问题。当且仅当没有该定时器的如何代码实例时,才会将定时器代码添加到队列中。这确保了定时器代码加入队列中最小的时间间隔为指定时间。

这种重复定时器的规则有两个问题:

1. 某些间隔会被跳过 

2. 多个定时器的代码执行时间可能会比预期小。

为了避免setInterval()的重复定时器的这两个缺点,可以使用

setTimeout(function(){

     //do something 

     setTimeout(arguments.callee,interval);

},interval)

上面实现了递归调用,这样做的好处是:在前一个定时器代码执行完成之前,不会向队列插入新的定时代码,确保不会有任何的缺失间隔。而且,它保证在下一次定时器代码执行之前,至少要等待指定的时间间隔。

你可能感兴趣的:(使用setTimeout()方法来模拟setInterval()与直接使用setInterval()有什么区别?)