MST

星途 面试题库

面试题:JavaScript中任务队列与微任务队列的执行顺序

请描述在JavaScript事件循环机制下,任务队列(宏任务队列)与微任务队列的执行顺序,并举例说明如何利用它们控制代码的执行顺序。
40.3万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 执行顺序
    • JavaScript 事件循环机制下,首先执行栈中的同步任务。当同步任务执行完,栈为空时,事件循环开始工作。
    • 先检查微任务队列,如果微任务队列中有任务,会不断从微任务队列中取出任务并执行,直到微任务队列为空。
    • 然后从宏任务队列中取出一个宏任务执行,执行完这个宏任务后,又会再次检查微任务队列,重复上述过程,即执行微任务队列直到为空,再取一个宏任务执行,如此循环。
  2. 举例
console.log('同步任务1');

setTimeout(() => {
    console.log('宏任务1');
}, 0);

Promise.resolve().then(() => {
    console.log('微任务1');
});

console.log('同步任务2');

在上述代码中:

  • 首先输出 同步任务1 ,接着输出 同步任务2 ,因为它们是同步任务,按顺序在执行栈中执行。
  • 同步任务执行完后,检查微任务队列,发现有 微任务1 ,所以输出 微任务1
  • 微任务队列执行完后,从宏任务队列中取出 宏任务1 执行,最后输出 宏任务1

通过这种方式,可以利用宏任务和微任务控制代码的执行顺序,例如一些需要优先执行的逻辑可以放在微任务中,一些相对不那么紧急的异步操作可以放在宏任务(如 setTimeout 等)中。