JavaScript 中的事件循环(Event Loop)是如何工作的?
JavaScript 中的事件循环(Event Loop)是如何工作的?
回答:
JavaScript 是单线程语言,但通过事件循环机制实现了异步操作。事件循环负责协调调用栈(Call Stack)、任务队列(Task Queue,也称宏任务队列)和微任务队列(Microtask Queue)的执行顺序。
其基本工作流程如下:
- 执行全局脚本(同步代码),压入调用栈并执行。
- 遇到异步操作(如 setTimeout、Promise、fetch 等),将其回调分别放入宏任务队列或微任务队列。
- 宏任务(Macrotask)包括:setTimeout、setInterval、I/O、UI 渲染等。
- 微任务(Microtask)包括:Promise.then/catch/finally、queueMicrotask、MutationObserver 等。
- 当调用栈为空时,事件循环先清空当前所有微任务(依次执行微任务队列中的所有回调)。
- 然后从宏任务队列中取出一个任务执行(每次只取一个)。
- 重复上述过程。
示例:
console.log('1');
setTimeout(() => {
console.log('2');
}, 0);
Promise.resolve().then(() => {
console.log('3');
});
console.log('4');
输出顺序: 1 → 4 → 3 → 2
解析:
console.log('1')和console.log('4')是同步代码,立即执行。Promise.then是微任务,在当前宏任务结束后立即执行。setTimeout是宏任务,需等待下一轮事件循环才会执行。
理解事件循环对掌握 JavaScript 异步编程、避免性能问题和调试复杂异步逻辑至关重要。

发表评论 (审核通过后显示评论):