setInterval存在的问题
首先明确,无论setTimeout还是setInterval,都是在指定时间,将回调函数推入任务队列,无法保证实际执行时间。 区别在于,setTimeout直接推入,setInterval会检查任务队列中是否存在相同的回调函数(未执行),若有则跳过本次推入。 上图中,setInterval的时间间隔是200ms,但回调函数执行需要较长时间,605ms推入时,发现405ms的回调函数仍未执行,因此跳过本次推入。 由此会引发多个回调函数执行的时间间隔,小于设定的参数值,甚至参数值被忽略而连续执行。
setTimeout模拟setInterval
const mySetInterval = (callback
, delay
) => {
const rec = (callback
, delay
) => {
setTimeout(() => {
callback()
rec(callback
, delay
)
}, delay
)
}
rec(callback
, delay
)
}
转载请注明原文地址:https://blackberry.8miu.com/read-31747.html