glownight

返回

执行顺序可以记成一句话:

先跑一个宏任务,再把微任务队列清空,再进行渲染,然后进入下一个宏任务。

简化流程:

  1. 取出并执行 1 个宏任务scriptsetTimeout、I/O、UI 事件等)
  2. 执行完后,立即把当前所有微任务全部执行完(Promise.thenqueueMicrotaskMutationObserver
  3. 微任务清空后,浏览器才有机会做一次渲染
  4. 进入下一轮,继续取下一个宏任务

补充重点:

  • 微任务会“插队”到下一个宏任务之前。
  • 如果微任务不断自我追加,可能长期阻塞渲染和后续宏任务。
浏览器 Event Loop 中,宏任务 和 微任务 的执行顺序是什么?
作者 glownight
发布于 2025年4月9日