事件循环是否与 JS 主线程在同一线程上运行?

Abh*_*ire 2 javascript multithreading asynchronous event-loop

我试图理解异步 JavaScript,但我想知道的一件事是,事件循环是否在主线程上运行?如果是这样,是否所有同步代码都Main()必须经过事件循环?(例如,console.log("Hello")还必须经过事件循环吗?)
并且事件循环是唯一允许将函数推送到调用堆栈的循环吗?

Mat*_*ans 5

  1. 是的,事件循环与主函数在同一线程上运行。

  2. 不,事件循环在主函数返回之前不会开始处理消息。 console.log()是同步的(虽然可能有一些异步进程参与生成控制台输出,但它们与事件循环无关)。

函数(或更准确地说是函数的堆栈帧)进入调用堆栈的方式只有一种——该函数由当前位于堆栈顶部的任何内容调用。当函数返回或抛出时,该函数将从调用堆栈中删除。在线程中,堆栈顶部的函数是当前正在运行的函数。

事件循环位于堆栈的底部,或者至少位于所有 JavaScript 函数的下方,因此只有当所有先前运行的 JavaScript 函数返回或抛出时,它才会运行。