面试题答案
一键面试- 执行顺序:
- 事件循环首先执行栈中的同步任务,当同步任务执行完,栈为空时,进入事件循环。
- 事件循环会优先检查微任务队列,将微任务队列中的所有任务依次执行完毕,直到微任务队列为空。
- 然后事件循环会从宏任务队列中取出一个宏任务执行,执行完这个宏任务后,再次检查微任务队列,将微任务队列中的任务执行完毕,如此循环,每次执行完一个宏任务,就会检查并执行微任务队列。
- 举例说明:
console.log('同步任务1');
setTimeout(() => {
console.log('宏任务1');
}, 0);
Promise.resolve().then(() => {
console.log('微任务1');
});
console.log('同步任务2');
在上述代码中:
- 首先执行同步任务,打印
同步任务1
和同步任务2
。 - 然后同步任务执行完毕,检查微任务队列,发现
Promise.resolve().then(() => { console.log('微任务1'); })
这个微任务,执行它,打印微任务1
。 - 微任务队列执行完毕后,从宏任务队列中取出
setTimeout(() => { console.log('宏任务1'); }, 0);
这个宏任务执行,打印宏任务1
。