JavaScript事件循环

JavaScript事件循环

事件循环(Event Loop),是JavaScript运行时环境的一部分,是 JS 为了支持异步和任务优先级而设计的一套调度逻辑, 是一种专门处理回调的机制。

JavaScript中代码分两类,一类是能够立即执行的,一类是由事件回调组成的(例如,鼠标的点击触发的事件,网络请求的应答)

这两类代码,也有人称为同步代码和异步代码

为了处理这两类代码,便有了 Event Loop ,由此 JS 便能非阻塞地运行.

浏览器环境

浏览器解析js文件,先执行能够立刻执行的同步代码,再将回调函数分成两类加入队列,分别是tasks和jobs队列(有人称为宏任务和微任务队列),

浏览器会优先处理jobs队列下的所有任务,处理完毕后再从tasks队列中取一个执行,周而复始。

网上找的图

区分JavaScript引擎JavaScript运行时

拿chrome浏览器和node做例子。v8就是他们共同的js引擎

对chrome来说,它不止提供了v8引擎,还提供了诸如DOM,BOM,定时器(setTimeout,setInterval),XHR,fetch等Web API, 这些共同构成了JavaScript运行时

对node来说,js的解析执行也由v8引擎负责,但为了更好地做本地开发,它提供了OS, http, file相关的API。所以说,虽然两者都能运行js但其提供的功能,应用场景却是不同的。

简言之,js引擎仅负责js代码的解析,运行时环境则针对不同应用场景加强了js的功能,让程序员们更加方便快捷地进行开发。

参考

MDN docs - The event loop


JavaScript事件循环
http://example.com/2023/01/08/事件循环EventLoop/
作者
Ray
发布于
2023年1月8日
许可协议