Skip to content
快看这页儿写了啥...

阐述 JS 事件循环 EventLoop?

题干

  • 事件循环 EventLoop

题解

EventLoop 即事件循环是一个执行模型,是一种用于管理和调度异步任务的机制,它在不同的地方有不同的实现。浏览器和 NodeJS 基于不同的技术实现了各自的 EventLoop

JS 有一个主线程,用来执行同步代码,而针对异步代码,JS 存在异步队列,由于 JS 任务又分为宏任务和微任务,所以队列有两种,宏任务队列以及微任务队列。

引擎开始解析时,整体 JS 代码,即整个 Script 脚本就是第一个宏任务,直接进入主线程执行,执行过程中会遇到一些异步任务(包含宏任务微任务),宏任务进入宏任务队列,微任务进入微任务队列。

当主线程代码执行结束后,此时主线程空闲,则会检查微任务队列,如果该队列中存在任务,则依次将各个微任务移入主线程执行,直到执行掉所有的微任务。

如果没有微任务或者执行完所有的微任务之后,开始检查宏任务队列,将宏任务队列中下一个宏任务移入主线程执行,在执行下一个宏任务之前,浏览器会做一次渲染操作。

从开始执行,到下一个宏任务执行前,被称为一次循环。

在执行微任务时,微任务回调也可能会出现异步宏任务或者异步微任务,如上述一样,入队等候即可。

每个宏任务执行完后,就会清空当前执行栈所产生的所有微任务,然后才会进行下一个宏任务的执行。

整个过程就是先执行一个宏任务,再执行宏任务所产生的所有微任务,接着再执行下一个宏任务,微任务回调也会产生宏任务微任务,如此不断重复,这被称为事件循环,即 EventLoop

相关

什么是微任务、宏任务?

微任务、宏任务的区分是为了做什么? 优先级?

setTimeout(fn, 0)多久才执行 -> Event Loop?

JS 中事件循环和 Node 事件循环区别?process.nextTick 执行顺序?

扩展

「硬核JS」一次搞懂JS运行机制 - isboyjc

贡献者

isboyjc's avatar isboyjc

浏览量(PV)  次  ·  独立访客(UV)  人次
不正经的前端 | 八股 · 欢迎 star ⭐