互联网科技

JS引擎线程的执行过程的三个阶段(二)

2019-02-25  本文已影响1人  吉古力

继上一篇文章 JS引擎线程的执行过程的三个阶段(一)

三. 执行阶段

1. 网页的线程

永远只有JS引擎线程在执行JS脚本程序,其他三个线程只负责将满足触发条件的处理函数推进事件队列,等待JS引擎线程执行, 不参与代码解析与执行。

2. 宏任务

宏任务(macro-task)可分为同步任务异步任务

理解宏任务中同步任务和异步任务的执行顺序,那么就相当于理解了JS异步执行机制–事件循环(Event Loop)。

3. 事件循环

事件循环可以理解成由三部分组成,分别是:

任务队列(task queue)就是以队列的数据结构对事件任务进行管理,特点是先进先出,后进后出。

事件循环

setTimeout和setInterval的区别:

4. 微任务

微任务是在es6和node环境中出现的一个任务类型,如果不考虑es6和node环境的话,我们只需要理解宏任务事件循环的执行过程就已经足够了,但是到了es6和node环境,我们就需要理解微任务的执行顺序了。
微任务(micro-task)的API主要有:Promise, process.nextTick

微任务

例子理解:

console.log('script start');

setTimeout(function() {
  console.log('setTimeout');
}, 0);

Promise.resolve().then(function() {
  console.log('promise1');
}).then(function() {
  console.log('promise2');
});

console.log('script end');

执行过程如下:

最后的输出结果即为:

script start
script end
promise1
promise2
setTimeout

文章参考:

https://github.com/yygmind/blog/issues/12

https://heyingye.github.io/2018/03/19/js引擎的执行过程(一)

https://heyingye.github.io/2018/03/26/js引擎的执行过程(二)

https://github.com/yygmind/blog

上一篇 下一篇

猜你喜欢

热点阅读