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