经典面试题:JS的执行顺序 setTimeout与Promise

Question: What does the following code print?

console.log('one');
setTimeout(function() {
  console.log('two');
}, 0);
Promise.resolve().then(function() {
  console.log('three');
})
console.log('four');

当然最开始顺序执行主线程程序,会log出one、four。这里又涉及到异步的宏任务和微任务,setTimeout加入macrotask队列,是宏任务,Promise加入microtask队列,整体是微任务,主线程执行完了之后先从微任务栈里面获取微任务执行,没有微任务了,就去宏任务栈里面获取宏任务执行,所以在一个循环内,微任务是比宏任务先执行的
网上也找到一个很多JS执行顺序例子的网址:https://www.jianshu.com/p/e585e737fb6f

你可能感兴趣的:(经典面试题:JS的执行顺序 setTimeout与Promise)