eventLoop

57 阅读1分钟

eventLoop

console.log(1) //同步 1

setTimeout(() => {
  console.log(2) //宏任务 7
}, 0)
new Promise(resolve => {
  console.log(3) //同步 2
  resolve()
}).then(() => {
  console.log(4) //script中微任务 5
})
setTimeout(() => {
  console.log(5) //同步代码 9.1
  new Promise(resolve => {
    console.log(6) //同步代码 9.2
    setTimeout(() => { 
      console.log(7) //宏任务 9.4
    })
    resolve()
  }).then(() => {
    console.log(8) //微任务 9.3
  })
}, 500) //宏任务 9

new Promise(resolve => {
  console.log(9) //同步 3
  resolve()
}).then(() => {
  console.log(10) //script中的微任务 6
  setTimeout(() => {
    console.log(11)
  }, 0) //宏任务 8
})
console.log(12) //同步 4
// 1 3 9 12 4 10 2 11 5 6 8 7

eventLoop

宏任务

script整体代码 、setInterval、setTimeout、setImmediate、IO...

微任务

promise.then promise.catch nextTick(默认微任务 有dom操作宏任务) ....

执行机制
  • 先同步后异步
  • 先进入其中一个宏任务 再进行对应的宏任务内的微任务 直到清空宏任务队列及微任务队列

重点案例

  • tab切换案例
  • 回到顶部案例
  • 全局拖拽案例
  • 局部拖拽案例
  • 购物车案例
  • 轮播图案例 (透明轮播、无缝轮播、旋转木马轮播)
  • 放大镜案例

重点重构

  • 高阶函数重构
  • new关键词重构
  • instance重构
  • flat重构 (扁平化实现)
  • promise重构
  • 数组去重实现

执行机制

  • 浏览器渲染机制
  • 事件流
  • eventLoop
  • ...