setTimeout(function(){
console.log('D');
},0)
var promise = new Promise(function(resolve, reject){
console.log('A');
resolve('C');
})
console.log('B');
promise.then(function(value){
console.log(value)
});
这段代码AB先打印我没问题,就是不理解为什么是C先于D打印,按理说应该是setTimeout先把回调放进任务队列里面等待执行吧
这里涉及到异步的宏任务和微任务,setTimeout是宏任务,Promise整体是微任务,主线程执行完了之后先从微任务栈里面获取微任务执行,没有微任务了,就去宏任务栈里面获取宏任务执行,所以在一个循环内,微任务是比宏任务先执行的,所以先打印C再打印D