一、写在前面
刷了一道面试题,问的是setInterval为什么要用setTimeout来模拟呢?
,看了别人的一些文章,加上自己的理解,我将其总结一下。
二、setInterval的弊端
如下所示为setInterval执行函数
setInterval(fn(), N);
我们了解js的事件循环机制就明白了,setInterval
并不是说当过了时间N之后就会执行fn函数,其实是过了时间N后,fn函数才会被放入事件队列中等待执行。此时下一个定时器就会开启计时,所以如果主线程中的任务需要等待的时间特别长,则就会在事件队列中堆积的fn函数特别多,导致最终这些函数都会一起执行。完全没有定时的效果,这就是setInterval
的弊端。
三、使用setTimeout来模拟setInterval
我们看这一个例子: