猿问

JS中,script(整体代码)是怎么入栈的?

在看js事件循环机制的解释时,经常看到如下说明:

任务队列分为macro-task(宏任务)与micro-task(微任务),在最新标准中,它们被分别称为taskjobs

macro-task大概包括:script(整体代码)setTimeoutsetIntervalsetImmediateI/OUI rendering

micro-task大概包括: process.nextTickPromiseObject.observe(已废弃), MutationObserver(html5新特性)

而后开始解释事件循环的流程,当执行栈为空时,事件循环先从一个macro-task开始,然后执行所有的micro-task,再执行一个macro-task,balabala...

那么问题来了,在第一次执行事件循环的时候,通常都会这样说

事件循环从宏任务队列开始,这个时候,宏任务队列中,只有一个script(整体代码)任务。

想知道script(整体代码)是怎么作为macro-task入栈的?
比如说,setTimeoutajax在浏览器中都有对应的webApi模块去处理,script(整体代码)应该是先编译成指令存在指令区,然后开始执行的吧。这个过程是怎么变成task任务,进而添加到队列里的,为啥不是直接入栈呢?

求各位大神解答!

文章引用:
前端基础进阶(十二):深入核心,详解事件循环机制


慕村9548890
浏览 896回答 2
2回答

DIEA

"script(整体代码)应该是先编译成指令存在指令区,然后开始执行的吧"这句话有误,javascript是一门解释型的语言,它是被js引擎所边解释边执行的,没有“先编译成指令存在指令区”一说......
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答