javascript事件循环中宏任务与微任务是上下级关系:宏任务定义主干节奏,每次执行一个;微任务作为紧急插件,在每个宏任务结束后立即清空全部。典型宏任务包括settimeout、dom事件、script整体代码、ui渲染;微任务包括promise.then、async/await后续代码、queuemicrotask()和mutationobserver回调。

宏任务队列和微任务队列不是并列执行的“两个兄弟”,而是有明确主次关系的“上下级”:宏任务是事件循环的“主干节奏”,微任务是每次主干执行后必须立刻处理的“紧急插件”。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
宏任务队列负责节奏控制
它定义了事件循环的基本步调——每次只取一个任务执行,像工厂里每小时发一次开工指令。常见宏任务包括:
• setTimeout/setInterval 回调
• DOM 事件回调(如 click、input)
• script 标签整体代码块(初始同步脚本也算一个宏任务)
• UI 渲染(浏览器自动插入,不可手动添加)
• requestAnimationFrame
微任务队列负责即时响应
它不参与节奏分配,只在每个宏任务结束后“强制清空”,像领导开完会,助理必须立刻把所有待办事项全处理完才允许散会。常见微任务包括:
• Promise.then/catch/finally 回调
• async/await 中 await 后的代码段
• queueMicrotask() 手动插入的微任务
• MutationObserver 的回调(监听 DOM 变更)
分工逻辑体现在执行顺序上
事件循环不会“先跑完宏任务再跑微任务”,而是严格遵循:
执行一个宏任务 → 立即执行所有当前微任务 → (可选)渲染 → 执行下一个宏任务
这意味着:
• 微任务永远插在宏任务之间,且不跨宏任务“留作业”
• 新产生的微任务会在本轮清空阶段被一并执行(比如 Promise.then 里又 new Promise().then,也会被当轮处理)
• 宏任务之间可能间隔 UI 渲染,但微任务之间绝不中断,也不让渡控制权
为什么这样设计?
微任务优先级更高,是因为它们通常代表“已确定结果但尚未交付”的操作(如 Promise 已 resolve,只需通知回调),耗时短、逻辑紧耦合;而宏任务往往涉及外部 I/O 或用户交互,不确定性高、耗时长。这种分工让 JS 能在保持单线程简洁性的同时,兼顾响应及时性与调度可控性。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










