美文网首页
事件循环 Event Loop

事件循环 Event Loop

作者: _一九九一_ | 来源:发表于2019-10-28 10:35 被阅读0次
  • JavaScript 是一门单线程语言,异步操作都是放到事件循环队列里面,等待主执行栈来执行的,并没有专门的异步执行线程
  • Macro Task (宏任务)和 Micro Task(微任务), 并且每个宏任务结束后, 都要清空所有的微任务
  • Macro:script( 整体代码)、setTimeout、setInterval、I/O、UI 交互事件、setImmediate(Node.js 环境)
  • Micro:Promise、MutaionObserver、process.nextTick(Node.js 环境)

题目

console.log(1)
setTimeout(function() {
  console.log(2)
}, 0);
const intervalId = setInterval(function() {
  console.log(3)
}, 0)
setTimeout(function() {
  console.log(10)
  new Promise(function(resolve) {
    console.log(11)
    resolve()
  })
  .then(function() {
    console.log(12)
  })
  .then(function() {
    console.log(13)
    clearInterval(intervalId)
  })
}, 0);

Promise.resolve()
  .then(function() {
    console.log(7)
  })
  .then(function() {
    console.log(8)
  })
console.log(9)

// 1 
// 9
// 7
// 8
// 2
// 3
// 10
// 11
// 12
// 13
console.log('1');

setTimeout(function() {
  console.log('2');
}, 0);

Promise.resolve().then(function() {
  console.log('3');
}).then(function() {
  console.log('4');
});

console.log('5');

// 1
// 5
// 3
// 4
// 2
console.log('1');

setTimeout(function() {
  console.log('2');
}, 10);

new Promise(resolve => {
    console.log('3');
    resolve();
    setTimeout(() => console.log('4'), 10);
}).then(function() {
    console.log('5')
})

console.log('6');

// 1
// 3
// 6
// 5
// 2
// 4

相关文章

网友评论

      本文标题:事件循环 Event Loop

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