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
setTimeout
script end
promise1
promise2
但是输出的结果是:
script start
VM106:13 script end
VM106:8 promise1
VM106:10 promise2
VM106:4 setTimeout
为什么setTimeout在最后打印出来的?
先执行宏任务,再执行清空微任务队列,再执行下一个宏任务.
第一个宏任务队列中只有一个任务:执行主线程上的JS代码.
把整个代码段看作第一个宏任务(执行所有同步任务,包括new Promise()里的):
再清空微任务队列(promise.then MutationObserver):
下一个宏任务(setTimeout setInterval requestAnimationFrame):