setTimeout模拟setInterval

254 阅读1分钟

为什么要使用setTimeout模拟setInterval

为什么?接着往下看就明白了

setInterval

const setInterval = (()=>{
    console.log('每秒执行一次')
},1000)

setInterval 每 n 毫秒启动一个函数,而无需考虑函数何时完成执行。

如果一个函数总是花费相同的时间,那就没问题了:

image.png

函数可能需要不同的执行时间,这具体取决于网络条件,例如:

image.png

也许一个较长时间的执行会与下一次执行重叠:

image.png

为了避免这种情况,可以在回调函数完成时安排要被调用的递归的 setTimeout:

const myFunction = () => {
  // 做些事情
  setTimeout(myFunction, 1000)
}
setTimeout(myFunction, 1000)

这样就可以实现setInterval的功能,但是没有setInterval的问题