🔹 概念通俗解释
-
宏任务:像是“大的工作任务”,要放到下一轮事件循环去执行。
👉 例子:setTimeout、setInterval、setImmediate(Node.js)、DOM 事件回调、I/O 操作。 -
微任务:像是“插队的小任务”,会在当前宏任务执行结束后,立刻执行,优先级比宏任务高。
👉 例子:Promise.then、MutationObserver、queueMicrotask。
🔹 生活类比
想象你在餐厅吃饭:
- 宏任务:点一道大菜,需要厨师做完(比如红烧肉),等上下一轮上菜。
- 微任务:点个小吃(比如花生米),厨师顺手就端上来,插队在大菜之间。
🔹 代码案例
console.log("1");
setTimeout(() => {
console.log("2 宏任务");
}, 0);
Promise.resolve().then(() => {
console.log("3 微任务");
});
console.log("4");
👉 输出顺序:
1
4
3 微任务
2 宏任务
🔍 为什么这样?
console.log("1")和console.log("4")—— 同步代码,先执行。Promise.then(...)—— 微任务,排到本轮宏任务的尾巴上,马上执行。setTimeout(...)—— 宏任务,要等到下一轮事件循环才执行。
🔹 关键总结
- 执行顺序:同步任务 > 微任务 > 宏任务
- 微任务的执行时机比宏任务更早(像是插队的小任务)。