事件循环核心是宏任务→全部微任务→下一宏任务的固定节奏;宏任务包括script、settimeout等,微任务包括promise.then、async/await等;解题需同步执行→微任务清空→宏任务轮转。

直接抓住三点:执行顺序规则、典型任务归类、现场拆解逻辑。不用背答案,讲清机制自然得分。
一、先说清楚事件循环的核心节奏
每轮事件循环只干三件事:
- 执行一个宏任务(比如整段 script、setTimeout 回调)
- 立即清空全部微任务(Promise.then、queueMicrotask 等,新产生的也得当场执行完)
- 浏览器可能渲染 UI,然后取下一个宏任务
关键不是“谁快”,而是强制顺序:宏任务 → 所有微任务 → 下一个宏任务。这个链条不能跳过、不能插队。
二、快速区分常见任务类型(面试时脱口而出)
宏任务(排队等号的“大厅窗口”):
script(主代码块)、setTimeout、setInterval、setImmediate(Node)、I/O、UI 渲染、postMessage、DOM 事件回调
微任务(插队优先的“VIP 窗口”):
Promise.then/catch/finally、async/await 后续代码、queueMicrotask、MutationObserver、process.nextTick(Node 中比 Promise 还早)
注意:async/await 是 Promise.then 的语法糖,本质仍是微任务;所有微任务一定在下一个宏任务之前执行完,哪怕中途又生成了新的微任务。
三、遇到题目立刻画执行流(边说边拆)
以经典题为例:
console.log('1');
setTimeout(() => console.log('2'), 0);
Promise.resolve().then(() => console.log('3'));
console.log('4');
回答时这样组织语言:
- 同步代码先执行:输出 1 → 4
- setTimeout 是宏任务,进宏队列,暂不执行
- Promise.then 是微任务,进微队列
- 第一轮宏任务(script)结束,立刻执行所有微任务 → 输出 3
- 微任务清空,才从宏队列取下一个 → 执行 setTimeout 回调 → 输出 2
结论顺序:1 → 4 → 3 → 2。重点不是记结果,是展示你每一步都在按事件循环规则推演。











