event loop是否与JS主线程运行在同一线程?异步JS执行疑问
Event Loop相关疑问解答
- 关于Event Loop的运行线程:Event Loop确实运行在JS主线程上。JS主线程是单线程执行,Event Loop本身就是主线程用来调度任务执行顺序的核心逻辑,没有单独开辟独立线程。
- 关于同步代码是否需要经过Event Loop处理:全局作用域下的初始同步代码(也就是你提到的
Main()中的代码)不需要经过Event Loop调度,会在JS引擎初始化执行上下文之后直接推入调用栈执行,这个阶段Event Loop还没有开始处理各类任务队列。比如你举的console.log("Hello")如果是写在全局的同步代码,会直接进调用栈执行,全程不需要Event Loop介入。
只有当调用栈被完全清空(所有初始同步代码执行完毕)之后,Event Loop才会正式启动循环逻辑,依次处理微任务队列、渲染流程、宏任务队列的内容。 - 关于Event Loop是否是唯一能往调用栈推函数的主体:答案是否定的。最常见的反例就是同步函数调用:比如你在同步执行的函数内部调用另一个函数,这个被调用的函数是JS引擎直接推入调用栈的,全程不需要Event Loop参与。
Event Loop的作用仅限调用栈为空时,从对应的任务队列中取出待执行的回调函数,推入调用栈执行。日常的同步调用、递归等场景的函数入栈,都是JS引擎直接处理的,和Event Loop没有关系。
内容的提问来源于stack exchange,提问作者Abhishek Ghimire
相关产品推荐
相关产品推荐

