首页  >  文章  >  web前端  >  为什么 JavaScript 永不休眠:事件循环简单指南

为什么 JavaScript 永不休眠:事件循环简单指南

Patricia Arquette
Patricia Arquette原创
2024-10-30 03:24:03605浏览

JavaScript 作为一种单线程语言: 简要提及 JavaScript 如何一次只处理一项任务,但事件循环却让它看起来并非如此

事件循环如何工作:事件循环过程中的关键步骤

  • 堆栈: 调用堆栈管理同步代码。

  • 队列:回调队列保存等待执行的任务。

  • 循环: 事件循环在
    之前检查堆栈是否为空 将任务从队列移动到堆栈。

Why JavaScript Never Sleeps: An Easy Guide to the Event Loop

工作流程细分:

初始代码执行:

console.log('Hi');
$.get('url', function cb(data) {
  console.log(data);
});
console.log('JSConfEU');

  • 当此代码开始执行时,console.log('Hi') 会添加到调用堆栈中,并在控制台中打印“Hi”。

异步函数调用($.get):

  • 接下来,遇到 $.get('url', function cb(data) { ... }) 。此函数发起 HTTP 请求以从“url”检索数据。

  • 请求不会阻塞主线程,而是发送到 Web API 环境(通常是浏览器的一部分)。

  • 回调函数(cb)被注册为在HTTP请求完成后执行,但它不会立即执行。 HTTP 请求继续在 Web API 部分加载,标记为 XHR (XMLHttpRequest),这通常用于处理网络请求。

移动到下一个同步行:

  • javaScript 移至下一行 console.log('JSConfEU'),该行已添加到调用堆栈中。然后“JSConfEU”被打印到控制台。

事件循环和任务队列:

  • 完成所有同步代码后,调用堆栈变空,JavaScript 等待任何异步任务完成。

  • HTTP 请求完成后,回调函数 (cb) 将从 Web API 移至任务队列。

  • 事件循环不断检查调用堆栈是否为空,当为空时,事件循环将任务从任务队列移动到调用堆栈

回调执行:

  • 当事件循环将回调函数放入调用堆栈时,它会执行console.log(data);在回调函数中,将从 HTTP 请求接收到的数据打印到控制台。

摘要:

此流程演示了事件循环如何处理异步代码
作者:

  • 立即在调用堆栈上处理同步代码。

  • 处理 Web API 中的异步任务,完成后将它们移动到任务队列。

  • 允许事件循环仅在调用堆栈为空时将任务移至调用堆栈,确保非阻塞代码执行。

以上是为什么 JavaScript 永不休眠:事件循环简单指南的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn