MST

星途 面试题库

面试题:JavaScript事件循环机制中宏任务和微任务的执行顺序

请描述在JavaScript事件循环机制里,宏任务队列和微任务队列的执行顺序是怎样的,并举例说明。
17.3万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 执行顺序
    • 事件循环首先执行栈中的同步任务,当同步任务执行完,栈为空时,进入事件循环。
    • 事件循环会优先检查微任务队列,将微任务队列中的所有任务依次执行完毕,直到微任务队列为空。
    • 然后事件循环会从宏任务队列中取出一个宏任务执行,执行完这个宏任务后,再次检查微任务队列,将微任务队列中的任务执行完毕,如此循环,每次执行完一个宏任务,就会检查并执行微任务队列。
  2. 举例说明
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