美文网首页ES6HTML5
js事件循环event loop

js事件循环event loop

作者: AvenKe | 来源:发表于2020-02-16 17:02 被阅读0次

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

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

    本文链接:https://www.haomeiwen.com/subject/djqmfhtx.html