欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

setTimeout模拟setInterval

程序员文章站 2024-02-01 08:51:10
...

setInterval存在的问题

  首先明确,无论setTimeout还是setInterval,都是在指定时间,将回调函数推入任务队列,无法保证实际执行时间。
  区别在于,setTimeout直接推入,setInterval会检查任务队列中是否存在相同的回调函数(未执行),若有则跳过本次推入。
setTimeout模拟setInterval
  上图中,setInterval的时间间隔是200ms,但回调函数执行需要较长时间,605ms推入时,发现405ms的回调函数仍未执行,因此跳过本次推入。
  由此会引发多个回调函数执行的时间间隔,小于设定的参数值,甚至参数值被忽略而连续执行。
 

setTimeout模拟setInterval

const mySetInterval = (callback, delay) => {
  const rec = (callback, delay) => {
    setTimeout(() => {
      callback() // 执行callback
      rec(callback, delay) // 递归
    }, delay)
  }
  rec(callback, delay)
}
相关标签: 手写系列 队列