事件循环Event Loop

2020-11-04  本文已影响0人  YellowPoint

一句话解释

js的主线程是单线程运行的,主线程先执行同步代码,遇到异步操作如ajax请求、定时器等需要在一段时间后再执行的事件,便交给其他线程如请求线程、定时触发线程,满足条件后就放到任务队列中,主线程执行完任务后,就去任务队列里拉取任务,按照先进先出的原则依次执行,如此循环;
其中任务队列分为宏任务队列与微任务队列,执行完一个宏任务都会去检查是否有微任务,执行完所有微任务后,页面更新渲染,再执行下一个宏任务;

问答

1.为什么JS是单线程的?

2.JS单线程如何实现异步?

3.为什么要有微任务?

4.常见的宏任务与微任务有哪些?

5.浏览器什么时候渲染?

6.与Node环境的事件循环有什么区别?

浏览器和Node 环境下,microtask 任务队列的执行时机不同:

由于定时器插入时机不同,同一代码执行结果也会不同,如下:

setTimeout(()=>{
    console.log('timer1')
    Promise.resolve().then(function() {
        console.log('promise1')
    })
}, 0)
setTimeout(()=>{
    console.log('timer2')
    Promise.resolve().then(function() {
        console.log('promise2')
    })
}, 0)

Node端分为6个阶段,

参考

上一篇 下一篇

猜你喜欢

热点阅读