在看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任务,进而添加到队列里的,为啥不是直接入栈呢?求各位大神解答!文章引用:前端基础进阶(十二):深入核心,详解事件循环机制
添加回答
举报
0/150
提交
取消