Event Loop

114 阅读1分钟

什么是 EventLoop?

从名称上来看,EventLoop 是事件循环,由于 JS 是单线程的,在执行代码的时候,如果碰到一些异步代码(例如 AJAX),JS 会发送一个请求,并且发送了一个消息,然后继续执行下面的代码。那么这个时候,就需要有人轮询地去确认那个网络资源是否返回,再把结果返回到 JS 代码中。网络请求是一种事件,在浏览器的环境中,JS 还会有其他异步代码,而管理这些事件,以及遵循特定的规则将事件通知 JS,这一模块就是 EventLoop。浏览器环境和 Node.js 的实现是有区别的。

对于前端开发人员来说,一般只需要了解一些异步事件的执行顺序即可。

宏任务和微任务

在浏览器环境中,异步事件都可以被分类为宏任务或者是微任务。

  • 宏任务:setTimeout
  • 微任务:Promise.then(fn), await 的代码可以等价转换成 Promise,比如 await fn() -> fn().then()

当我们执行完一个宏任务后,就会把当前的微任务都执行完,再看是否有宏任务,如此循环。