2026-10-31 17:18:52
JavaScript事件循环的机制可通过以下步骤和图解清晰理解:
核心机制概述JavaScript是单线程语言,通过事件循环(Event Loop)实现异步非阻塞操作。其核心由调用栈(Call Stack)、Web API、任务队列(Queue)和事件循环本身组成。

同步任务入栈调用函数时,函数会被压入调用栈(后进先出结构)。例如:
const foo = () => console.log("First");foo(); // 压入调用栈并立即执行
异步任务移交Web API当遇到异步操作(如setTimeout、HTTP请求)时,浏览器提供的Web API会接管回调函数,而主线程继续执行后续代码。例如:
const bar = () => setTimeout(() => console.log("Second"), 500);bar(); // setTimeout回调被移交Web API
回调进入任务队列Web API完成计时或请求后,回调函数不会直接进入调用栈,而是被推入任务队列等待处理。关键点:setTimeout的延迟时间仅表示回调最早可入队时间,而非立即执行。
事件循环连接队列与调用栈事件循环持续检查调用栈是否为空。若为空,则将队列中的第一个任务压入调用栈执行。例如:
const baz = () => console.log("Third");baz(); // 同步执行,调用栈非空时队列任务等待
以下代码的执行顺序直观展示了事件循环的作用:
const foo = () => console.log("First");const bar = () => setTimeout(() => console.log("Second"), 500);const baz = () => console.log("Third");bar(); // 异步任务启动foo(); // 同步执行,输出"First"baz(); // 同步执行,输出"Third"执行步骤:

理解事件循环有助于编写高效非阻塞代码,尤其在处理复杂异步逻辑时至关重要。