#每天一个知识点# 很多人以为 setTimeout(fn, 0) 是「立刻执行」,其实它只是把回调推入宏任务队列,要等当前同步代码和所有微任务(Promise、queueMicrotask)跑完才轮到它。

所以即便延迟写 0,回调也永远排在微任务之后。所谓「0 毫秒」指的是「最早下一轮宏任务」,不是「马上」。需要抢先执行时,用 queueMicrotask 比 setTimeout 更准。
展开
1