# 事件循环 Event Loop

面试题:说说事件循环机制(满分答案来了 (opens new window)

这一次,彻底弄懂 JavaScript 执行机制 (opens new window)

# 基本概念

Js 是单线程的 每次只能做一件事 有一些阻塞的事情阻止了页面渲染怎么办 可以类似放到异步里去处理

一个线程中,事件循环是唯一的,但是任务队列可以拥有多个,任务队列又分为 macro-task(宏任务)与 micro-task(微任务),在最新标准中,它们被分别称为 task 与 jobs

宏任务

  • script
  • setTimeout
  • setInterval
  • setImmediate
  • UI render
  • I/O

微任务

  • Promise
  • MutationObserver(html5 新特性)
  • Async/Await(实际就是 promise)

# async/await 执行顺序

旧版 await 后面的流程在最后微任务结束执行

新版变的更快了 如果 await 后面直接跟的为一个变量 种情况的话相当于直接把 await 后面的代码注册为一个微任务 如果 await 后面跟的是一个异步函数的调用 会跳出 当前执行的异步函数,当所有微任务执行完毕以后,在回到这个函数执行后面的微任务

# node 和 浏览器 eventLoop 的主要区别

两者最主要的区别在于浏览器中的微任务是在每个相应的宏任务中执行的,而 nodejs 中的微任务是在不同阶段之间执行的

上次更新: 5/1/2022, 9:42:02 PM