宏任务(macrotask/task)与微任务(microtask)是事件循环中两类优先级不同的任务队列。宏任务包括 setTimeout/setInterval、I/O、UI 事件、script 主代码块;微任务包括 Promise 回调、queueMicrotaskMutationObserver

执行顺序规则:

  1. 执行同步代码(可视为第一个宏任务);
  2. 调用栈清空后,一次性清空微任务队列(期间新增的微任务也会继续执行);
  3. 执行下一个宏任务,重复步骤 2;
  4. 浏览器在两个宏任务之间可能进行页面渲染。
setTimeout(() => console.log('宏任务'));
Promise.resolve().then(() => console.log('微任务'));
// 输出:微任务 → 宏任务

关键差异与易错点:微任务在当前宏任务结束后立即全部执行,优先级高于下一个宏任务,因此连续产生微任务可能阻塞渲染(造成页面卡顿)。追问方向:async/awaitawait 之后的代码属于微任务;Node 的 process.nextTick 先于 Promise 微任务执行。