面试题答案
一键面试- 执行顺序:
- JavaScript 事件循环机制下,首先执行栈中的同步任务。当同步任务执行完,栈为空时,事件循环开始工作。
- 先检查微任务队列,如果微任务队列中有任务,会不断从微任务队列中取出任务并执行,直到微任务队列为空。
- 然后从宏任务队列中取出一个宏任务执行,执行完这个宏任务后,又会再次检查微任务队列,重复上述过程,即执行微任务队列直到为空,再取一个宏任务执行,如此循环。
- 举例:
console.log('同步任务1');
setTimeout(() => {
console.log('宏任务1');
}, 0);
Promise.resolve().then(() => {
console.log('微任务1');
});
console.log('同步任务2');
在上述代码中:
- 首先输出
同步任务1
,接着输出同步任务2
,因为它们是同步任务,按顺序在执行栈中执行。 - 同步任务执行完后,检查微任务队列,发现有
微任务1
,所以输出微任务1
。 - 微任务队列执行完后,从宏任务队列中取出
宏任务1
执行,最后输出宏任务1
。
通过这种方式,可以利用宏任务和微任务控制代码的执行顺序,例如一些需要优先执行的逻辑可以放在微任务中,一些相对不那么紧急的异步操作可以放在宏任务(如 setTimeout
等)中。