js核心知识点系列——《js引擎运行机制》

2019-01-04  本文已影响0人  轨迹枫

知识点: 

刚接触js的时候,把js执行顺序划分为同步任务和异步任务两种,同步任务先执行完之后再去执行异步任务,然后遇到了setTimeout和promise同时出现在一段逻辑里的情况,setTimeout0明明是先推入event loop任务队列,promise.then()后推入任务队列,但是代码实际运行的结果是,promise.then()先输出结果,setTimeout后输出结果。网上查询了一些资料,发现有更细微的任务划分,这也解释了我一直的疑惑。

setTimeout(()=>{console.log(1)});

newPromise((resolve, reject)=>{console.log(2)}).then(console.log(3));

输出: 2 3 1

1、macro-task(宏任务): 包括整体script代码、setTimeout、setInternal。

2、micro-task(微任务): Promise process.nextTick()。

3、执行一个宏任务,过程中如果遇到微任务,就将其放到微任务的【事件队列】里

4、当前宏任务执行完成后,会查看微任务的【事件队列】,并将里面全部的微任务依次执行完(需要注意的是本轮宏任务执行完之后,会第一时间去执行本轮宏任务中的微任务,执行完成之后,再去执行下一轮宏任务。)

上一篇下一篇

猜你喜欢

热点阅读