JavaScript通过事件循环实现异步,宏任务(如setTimeout)和微任务(如Promise.then)交替执行;每次宏任务后清空微任务队列。例如同步代码执行完后,先处理微任务再执行下一个宏任务,async/await基于Promise,后续代码作为微任务执行,因此输出顺序为:script start、async1 start、async2、script end、async1 end、setTimeout。

JavaScript 是单线程语言,通过事件循环(Event Loop)实现异步操作的非阻塞执行。理解微任务与宏任务的执行机制,是掌握 JavaScript 异步编程的关键。
在 JavaScript 中,任务被分为两类:宏任务(Macro Task)和微任务(Micro Task)。
每次事件循环中,先执行一个宏任务,然后清空所有可执行的微任务队列,再进入下一个宏任务。
事件循环按以下顺序运行:
立即学习“Java免费学习笔记(深入)”;
这意味着,微任务总是在当前宏任务结束后、下一个宏任务开始前被集中处理。
看下面这段代码:
console.log('script start');
setTimeout(() => {
console.log('setTimeout');
}, 0);
Promise.resolve().then(() => {
console.log('promise1');
}).then(() => {
console.log('promise2');
});
console.log('script end');
输出顺序为:
script start原因如下:
async 函数中的 await 后续代码本质上是 Promise.then 的语法糖,因此会被当作微任务处理。
async function async1() {
console.log('async1 start');
await async2();
console.log('async1 end'); // 这行相当于放入微任务队列
}
async function async2() {
console.log('async2');
}
console.log('script start');
async1();
console.log('script end');
输出为:
script start因为 await async2() 后面的代码被包装成微任务,在本轮宏任务结束后执行。
基本上就这些。搞清楚宏任务和微任务的调度顺序,就能准确预测异步代码的执行结果。不复杂但容易忽略细节。
以上就是JavaScript事件循环_微任务与宏任务执行机制剖析的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号