在看js事件循环机制的解释时,经常看到如下说明:
任务队列分为
macro-task(宏任务)与micro-task(微任务),在最新标准中,它们被分别称为task与jobs。
macro-task大概包括:script(整体代码),setTimeout,setInterval,setImmediate,I/O,UI rendering。
micro-task大概包括:process.nextTick,Promise,Object.observe(已废弃),MutationObserver(html5新特性)
而后开始解释事件循环的流程,当执行栈为空时,事件循环先从一个macro-task开始,然后执行所有的micro-task,再执行一个macro-task,balabala...
那么问题来了,在第一次执行事件循环的时候,通常都会这样说
事件循环从宏任务队列开始,这个时候,宏任务队列中,只有一个
script(整体代码)任务。
想知道script(整体代码)是怎么作为macro-task入栈的?
比如说,setTimeout和ajax在浏览器中都有对应的webApi模块去处理,script(整体代码)应该是先编译成指令存在指令区,然后开始执行的吧。这个过程是怎么变成task任务,进而添加到队列里的,为啥不是直接入栈呢?
求各位大神解答!
慕村9548890
DIEA
随时随地看视频慕课网APP
相关分类