美文网首页
使用setTimeout()方法来模拟setInterval()

使用setTimeout()方法来模拟setInterval()

作者: 晴天的晴q | 来源:发表于2019-02-13 19:27 被阅读0次

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

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

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

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

    1. 某些间隔会被跳过 

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

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

    setTimeout(function(){

         //do something 

         setTimeout(arguments.callee,interval);

    },interval)

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

    相关文章

      网友评论

          本文标题:使用setTimeout()方法来模拟setInterval()

          本文链接:https://www.haomeiwen.com/subject/pizdeqtx.html