天天看点

JS调用堆栈

  JavaScript 是一门单线程的语言,这意味着它只有一个调用栈,因此,它同一时间只能做一件事。如果我们运行到一个函数,它就会将其放置到栈顶。当从这个函数返回的时候,就会将这个函数从栈顶弹出,这就是调用栈做的事情。

JS调用堆栈

引入链接 :

  

macro-task(宏任务):包括整体代码script,setTimeout,setInterval

micro-task(微任务):Promise,process.nextTick

进入整体代码(宏任务)后,开始第一次循环。接着执行所有的微任务。然后再次从宏任务开始,找到其中一个任务队列执行完毕,再执行所有的微任务。

首先进入整体代码(宏任务)

遇到SetTimout,将其回调函数console.log 加入宏任务的Event Queue

遇到 new Promise  执行 ,将.then加入到微任务

遇到 console.log  执行

整个script代码(宏任务)这个时候已经执行,然后检查微任务发现有 一个.then的微任务,执行他

第一轮宏代码已经执行完成,开始了第二轮,检查宏任务的Event Queue,发现了setTimeout,执行他。

js