这是为了更好地控制 JavaScript 的执行顺序和响应性能,尤其是在处理异步代码时:
Promise.then()
)。setTimeout()
、setInterval()
、事件处理)。 简单说:微任务是“紧急的小事”,宏任务是“下一轮大事”。
setTimeout
回调)Promise.then()
、queueMicrotask()
)console.log('start');
setTimeout(() => {
console.log('macro task');
});
Promise.resolve().then(() => {
console.log('micro task');
});
console.log('end');
start
end
micro task // 微任务优先
macro task // 宏任务之后
类型 | 示例 | 何时执行 |
---|---|---|
微任务 | Promise.then() 、queueMicrotask() |
当前宏任务结束后,立刻执行所有 |
宏任务 | setTimeout() 、事件监听回调 |
每一轮事件循环的起点 |