事件循环
是什么?
- 处理程序中多个块的执行,且执行每块时调用 JavaScript 引擎,这种机制被称为事件循环。——《你不知道的Javascript中卷》
- “事件” (JavaScript 代码执行)——《你不知道的Javascript中卷》
能干啥?
- 事件循环负责执行代码、收集和处理事件以及执行队列中的子任务。——MDN
工作原理
const queue=[];
let event;
while(true){
if(queue.length>0){
event=queue.shift();
try{
event();
}catch(error){
reportError(error)
}
}
}
关联知识
栈(Stack)
是什么?——函数调用形成了一个由若干帧堆叠而成——MDN
-
帧中包含函数的参数和局部变量。(帧就是阮一峰老师提到的同步任务)
-
每个函数被调用时,会产生一个帧压入栈顶。
-
帧的弹出时机——函数执行完毕返回时,顶部帧会被弹出栈。
⚠️注意:
- 帧被弹出其参数和局部变量可能继续存在。(可能是闭包导致的)
- 这些未被销毁的参数和变量 仍能被任意的嵌套函数访问——MDN
堆(Heap)
- 对象被分配在堆中,用来表示一大块(通常是非结构化的)内存区域的计算机术语。——MDN
队列(Queue)
-
JavaScript 运行时包含一个待处理消息的消息队列。每一个消息都关联着一个用以处理这个消息的回调函数。——MDN
-
执行顺序:先进先出。
-
存储异步任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。——阮一峰