宏观任务:顺序执行
围观任务:异步执行
先执行宏观任务,在执行微观任务;
宏任务主要包含:script( 整体代码)、setTimeout、setInterval、setImmediate、I/O、UI 交互事件、requestAnimationFrame
微任务主要包含:Promise.then catch finally、MutationObserver、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');
console.log("**********************");
执行的过程:
1、整个代码当成1个宏任务,先执行完所有的同步代码。打印script start,把setTimout的回调函数放入宏任务队列,Promise的第一个then 放入微任务队列,打印 script end;
2、第一个宏任务执行完毕,检查微任务队列,依次清空微任务队列,打印 promise1,把promise的第二个then放入到微任务队列,同步代码执行完毕,继续清空微任务队列,打印promise2。
![](https://img-blog.csdnimg.cn/2848a2d83a614b5eb547a557a7b862f1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Y2V5p6q5Yy56ams5L2g5Yir5oCVeQ==,size_20,color_FFFFFF,t_70,g_se,x_16)