JavaScript 中的事件循环

发布时间 2024-01-11 16:10:19作者: 江月年年何相似

事件循环是 JavaScript 运行时环境的核心组件。它负责调度和执行异步任务。事件循环通过持续监视两个队列来工作:调用堆栈和事件队列。 调用堆栈是一种堆栈(LIFO)数据结构,存储当前正在执行的函数(存储代码执行期间创建的执行上下文)。 Web API是异步操作(setTimeout、获取请求、promise)及其回调等待完成的地方。它从线程池借用线程在后台完成任务,而不阻塞主线程。 作业队列(或微任务)是一个 FIFO(先进先出)结构,其中保存准备执行的async/await、promise、process.nextTick() 的回调。例如,已履行的 Promise 的解析或拒绝回调会排队到作业队列中。 任务队列(或宏任务)是一个 FIFO(先进先出)结构,用于保存准备执行的异步操作(定时器,如 setInterval、setTimeout)的回调。例如,超时的回调setTimeout()(准备好执行)会排队到任务队列中。 事件循环永久监视调用堆栈是否为空。如果调用堆栈为空,事件循环将查找作业队列或任务队列,并将任何准备好执行的回调出队到调用堆栈中。