跳到主要内容

简述浏览器和 Node.js 中的事件循环 ?

参考答案:

浏览器和Node.js中的事件循环都是为了处理JavaScript的单线程特性和异步操作而设计的。事件循环的主要目标是确保代码按照正确的顺序执行,即使这些代码是异步的。

浏览器中的事件循环

  1. 初始化阶段:浏览器加载并解析JavaScript代码。
  2. 事件监听阶段:开发者为各种事件(如点击、滚动、键盘输入等)添加监听器。当这些事件发生时,相关的回调函数会被添加到任务队列中。
  3. 任务执行阶段:浏览器按照任务队列的顺序执行任务。JavaScript代码执行会进入执行栈,而其他任务(如网络请求、UI渲染等)会在执行栈为空时执行。
  4. 渲染阶段:浏览器将页面绘制到屏幕上。

Node.js中的事件循环

  1. 初始化阶段:当Node.js启动时,它会初始化事件循环机制。
  2. 监听阶段:开发者可以通过添加事件监听器来处理各种事件,如文件系统操作、网络请求等。
  3. 事件触发阶段:当相应的事件发生时,Node.js会将事件回调函数添加到任务队列中。
  4. 执行阶段:Node.js按照任务队列的顺序执行任务。与浏览器不同的是,Node.js的执行栈中不仅可以执行JavaScript代码,还可以执行其他类型的回调函数。

宏任务和微任务

事件循环由宏任务和在执行宏任务期间产生的微任务组成。宏任务包括脚本(整体代码script)、setTimeout、setInterval、setImmediate(Node.js环境)、I/O、UI渲染等。微任务包括Promise.then、MutationObserver、process.nextTick(Node.js环境)等。在执行一个宏任务的过程中,产生的所有微任务都会被加入到微任务队列中,在当前宏任务执行完后,会立即执行所有的微任务。只有当所有的微任务都执行完毕后,才会开始下一个宏任务的执行。这就是所谓的“事件循环”。