Event loop 事件循环机制

浏览器端的 Event Loop

一个函数执行栈、一个事件队列(宏) 、一个微任务队列

 

宏任务

  macrotask 也叫tasks。一些异步任务的回调会依次进入macro task queue,等待会许被调用,

  这些异步任务包括:setTimeout/setInterval/setImmediate(Node)/requestAnimationFrame(浏览器)/IO/UI

 

微任务:

  microtask 也叫 jobs。

  包括:process.nextTick(Node)/promise.then()/Object.observe/MatationObserver

  (Promise构造函数里的代码是同步执行的)

 

总结:在eventLoop调度一个宏任务之前,先产看微任务队列是否有未执行的任务,如果有,先执行完微任务。

   执行栈-->微任务队列-->宏任务)

 

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

new Promise(function(resolve){
    //promise构造函数里面是同步的
    console.log('3')
    resolve()
    console.log('4')

}).then(function(){
    console.log(5)
})

console.log(6);
console.log(8);
//3-4-6-8-5-2

 

  

posted @ 2020-03-01 21:54  JoanChx  阅读(176)  评论(0编辑  收藏  举报