js事件循环event loop

简单来说浏览器主要执行循序:

1. 所有同步脚本 -> 2. microtask queue微队列里所有事件 -> 3. macrotask queue宏队列队首事件 -> 1...

备注:在步骤2或3中产生的microtask微任务会继续加入到microtask queue微队列的队尾。

那什么是microtask,什么是macrotask呢?

microtask:

  1. Promise
  2. process.nextTick (Node独有)
  3. Object.observe
  4. MutationObserver

macrotask:

  1. setTimeout
  2. setInterval
  3. setImmediate (Node独有)
  4. requestAnimationFrame (浏览器独有)
  5. I/O
  6. UI rendering (浏览器独有)

举个例子:

setTimeout(() => {
  console.log(3)
  Promise.resolve().then(() => {
    console.log(2)
  });
});

console.log(1);

new Promise((resolve, reject) => {
  console.log(4)
  resolve(5)
}).then((data) => {
  console.log(data);
})

setTimeout(() => {
  console.log(6);
})
console.log(7);

请在评论里留下你的答案吧~

你可能感兴趣的:(js事件循环event loop)