setTimeout模拟setInterval

    科技2024-06-14  83

    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) }
    Processed: 0.010, SQL: 8