概念定义
微任务是被调度的执行单元——promise 反应、MutationObserver 回调、queueMicrotask 条目——在 JavaScript 栈清空时、事件循环进入渲染或下一个宏任务之前运行。队列会被彻底清空,微任务再入队的微任务也都在浏览器绘制前跑完。
工作机制
任务结束后栈展开,微任务检查点清空队列,随后循环才决定本迭代是否渲染。由于清空是穷尽式的,自我续喂的微任务链永不交还控制权:无绘制、无输入、无定时器——这是与忙碌宏任务循环不同的冻结指纹。
使用场景
顺序敏感的逻辑:绘制前冲刷状态批次、在原语之上实现调度器优先级、理解 MutationObserver 为何在当前脚本后触发。框架正是依赖“渲染前排空”特性,把多次变更合并为每帧一次 DOM 更新。
常见误区
微任务并不让渡给浏览器:无限链会冻结渲染与输入。await 不带定时器时调度的是微任务续延,与 setTimeout(fn, 0) 的顺序不可互换。把重活塞进微任务只是躲开长任务监控,阻塞照旧;应跨任务拆分大工作量。