Notes

事件循环机制(综合)

一句话结论:记住“同步先跑完 → 清空微任务 → 再考虑渲染/下一轮宏任务”,就能推导出大多数执行顺序;卡顿通常来自“长任务 + 微任务堆积”。

1. 推导顺序的通用步骤

  1. 先把同步代码按调用栈顺序执行完
  2. 同步过程中注册的微任务进入 microtask queue
  3. 当前宏任务结束后,清空 microtask queue(直到为空)
  4. 浏览器在合适时机做一次渲染(可能发生)
  5. 进入下一轮宏任务

2. 常见“面试题”模板

console.log("A");
setTimeout(() => console.log("B"), 0);
Promise.resolve()
  .then(() => console.log("C"))
  .then(() => console.log("D"));
console.log("E");
// 常见:A E C D B

3. 性能经验

  • 把长计算切片:让出主线程(例如分批处理/requestIdleCallback/Worker)
  • 避免在微任务里递归追加微任务,否则会延后渲染与输入

关联阅读

cd ..