# 事件循环 Event Loop

# 为什么需要事件循环

  • JS是单线程,同一个时间只能做同一件事,所有任务需要排队,如果前一个任务耗时很长,后一个任务就需要一直等待

# 什么是事件循环

  • 同步任务进入主执行栈, 异步任务进入任务队列.
  • 主线程内的任务执行完毕, 去任务队列读取对应的任务, 推入主线程执行
  • 这个过程是不断循环的

# 微任务

  • promise
  • process.nextTick
  • Object.observe
  • MutationOberserver

# 宏任务

  • script
  • setTimeout
  • setInterval
  • I/O
  • UI rendering

# 执行流程

  • 执行同步代码
  • 执行栈为空, 查询是否有微任务需要执行
  • 执行所有微任务
  • 执行所有宏任务
  • 开始下一轮事件循环