JavaScript 是单线程语言,通过事件循环
(Event Loop)实现异步操作的管理。理解微任务与宏任务的执行机制,有助于掌握代码的实际执行顺序。
宏任务(Macrotask):每次事件循环中执行的一个完整任务单元,例如:
微任务(Microtask):在当前宏任务结束后、下一个宏任务开始前立即执行的任务,包括:
事件循环遵循以下规则:
关键点:每个宏任务执行完后,必须清空当前所有的微任务,再进入下一个宏任务。
看一段典型代码来验证执行顺序:
console.log('1'); setTimeout(() => { console.log('2'); }, 0); Promise.resolve().then(() => { console.log('3'); }); console.log('4');输出结果是:1 → 4 → 3 → 2
解释:
微任务可以继续产生新的微任务,这些也会在同一轮中被处理:
Promise.resolve().then(() => { console.log('A'); Promise.resolve().then(() => { console.log('B'); }); }); console.log('C');输出为:C → A → B
因为第一个 then 是微任务,执行时又添加了一个微任务,这个新微任务会在本轮微任务队列中继续执行。
基本上就这些。只要记住:宏任务划分阶段,微任务穿插在中间且优先执行。不复杂但容易忽略细节。