微任务与宏任务

99 阅读1分钟

如果js任务都是同步进行 , 那么在遇到定时器或者网络请求的需要延迟会怎样 ? 页面可能会瘫痪 , 因为可能需要很长的时间来处理 , 待定时器都完成后再继续执行代码 .

因此执行任务分为同步任务和异步任务 , 而异步任务又分为微任务和宏任务 .

console.log(1)     //同步任务
setTimeout(function() {
  console.log(2)
  new Promise(function(resolve) {
    console.log(3)
    resolve()
  }).then(function() {      //宏任务内部微任务
    console.log(4)
  })
})

new Promise(function(resolve) {
  console.log(5)                //同步任务
  resolve()
}).then(function() {
  console.log(6)
})
setTimeout(function() {
  console.log(7)
  new Promise(function(resolve) {
    console.log(8)
    resolve()
  }).then(function() {
    console.log(9)
  })
})
console.log(10) //同步任务

定时器为异步宏任务 ,如图所示

5-29-4.jpg

打印结果为 1,5,10,6,2,3,4,7,8,9