首页 > 其他分享 >js事件循环机制

js事件循环机制

时间:2024-10-29 10:32:02浏览次数:2  
标签:console log 队列 js 任务 循环 机制 执行

1. JavaScript 的执行环境

  • 单线程:JavaScript 是单线程的,这意味着它在同一时间只能执行一个任务。这种设计使得 JavaScript 在处理并发操作时需要依赖事件循环。

2. 执行栈(Call Stack)

  • 定义:执行栈是一个后进先出(LIFO)的数据结构,用于管理函数调用。每当一个函数被调用时,它会被推入栈中;当函数执行完毕后,它会被弹出栈外。

3. Web APIs

  • 定义:Web APIs 是浏览器提供的异步操作接口,用于处理如网络请求、定时器、DOM 事件等操作。
  • 工作原理:当 JavaScript 代码执行时,如果遇到异步操作,这些操作会被发送到 Web APIs 进行处理。处理完成后,Web APIs 会将相应的回调函数放入消息队列。

4. 消息队列(Callback Queue)

  • 定义:消息队列是一个先入先出(FIFO)的数据结构,用于存储待处理的回调函数。只有当执行栈为空时,事件循环才会从消息队列中取出一个回调函数并执行。

5. 微任务队列(Microtask Queue)

  • 定义:微任务队列用于存储微任务(如 Promise 的 thencatchfinally 回调和 MutationObserver)。
  • 优先级:微任务的执行优先级高于宏任务。在处理消息队列中的宏任务之前,事件循环会先执行所有的微任务。

6. 事件循环(Event Loop)

事件循环的主要工作流程如下:

  1. 检查执行栈:事件循环首先检查执行栈是否为空。
  2. 处理微任务:
    • 如果执行栈为空,事件循环会先处理微任务队列中的所有微任务。
  3. 处理宏任务:
    • 处理完所有微任务后,事件循环会从消息队列中取出一个宏任务并将其推入执行栈中。
  4. 重复过程:重复步骤 1 至 3,直到消息队列和微任务队列都为空。

7. 任务的优先级

  • 微任务:如 Promise 的回调,具有高优先级,优先于宏任务执行。
  • 宏任务:如 setTimeoutsetInterval、I/O 操作等。

事件循环的工作示例

 

  javascript
console.log('A'); // 1

setTimeout(() => {
    console.log('B'); // 5
}, 0);

Promise.resolve().then(() => {
    console.log('C'); // 3
    setTimeout(() => {
        console.log('D'); // 7
    }, 0);
});

setTimeout(() => {
    console.log('E'); // 6
}, 0);

Promise.resolve().then(() => {
    console.log('F'); // 4
});

console.log('G'); // 2

标签:console,log,队列,js,任务,循环,机制,执行
From: https://www.cnblogs.com/johnny-cli/p/18512432

相关文章

  • Python字典到JSON字符串的转换
    在Python中,字典是一种非常常见的数据结构。它可以轻松地转换为JSON字符串,从而实现了将Python对象序列化为JSON格式的目的。本文将详细介绍如何将Python字典转换为JSON字符串。1.Python字典的基本概念在Python中,字典是一种无序的键值对集合。每个键必须唯一且非空,而值可以是任何......
  • PbootCMS 模板首页循环调用所有栏目和对应内容
    问题:PbootCMS模板首页循环调用所有栏目和对应内容。答案:代码示例:{pboot:nav}栏目链接:[nav:link]栏目名称[nav:name]{pboot:listscode=[nav:scode]num=4order=date}内容链接:[list:link]内容名称:[list:title]内容图片:[list:ico]内容时间:[list:datestyle=Y-m-d]......
  • javaweb基于JSP+Servlet开发小区物业管理系统源码 毕业设计 课程设计
    作品编号:1114数据库:mysql后端技术:Servlet......
  • 温习 SPI 机制 (Java SPI 、Spring SPI、Dubbo SPI)
    SPI全称为ServiceProviderInterface,是一种服务发现机制。SPI的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过SPI机制为我们的程序提供拓展功能。1JavaSPI......
  • 鸿蒙基础篇-语句-分支-循环
    “在科技的浪潮中,鸿蒙操作系统宛如一颗璀璨的新星,引领着创新的方向。作为鸿蒙开天组,今天我们将一同踏上鸿蒙基础的探索之旅,为您揭开这一神奇系统的神秘面纱。”各位小伙伴们我们又见面了,我就是鸿蒙开天组,下面让我们进入今天的学习,鸿蒙基础篇-进阶布局语句:语句是程序执行......
  • 基于node.js+vue基于Android的新闻移动客户端的设计与实现前(开题+程序+论文)计算机毕业
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容选题背景在当今数字化时代,新闻传播方式发生了巨大变革。关于新闻移动客户端的研究,现有研究主要以新闻内容的推送、展示效果以及用户界面设计等为主。然而专门针对基......
  • 基于node.js+vue恒爱药房会员网上订购管理系统(开题+程序+论文)计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于药房会员网上订购管理系统的研究,现有研究主要以传统药房管理为主,专门针对会员网上订购管理系统的研究较少。在国内外,传统药房管理的研究成果较多,涵......
  • 青少年编程与数学 02-002 Sql Server 数据库应用 16课题、安全机制
    青少年编程与数学02-002SqlServer数据库应用16课题、安全机制课题摘要:一、安全机制1.身份验证(Authentication)2.授权(Authorization)3.角色(Roles)4.加密(Encryption)5.审计(Auditing)6.其他安全特性二、身份验证1.Windows身份验证模式(WindowsAuthenticationMod......
  • Html+JS+CSS实现压扁小鸟游戏源码
    Html+JS+CSS实现压扁小鸟游戏源码,文件太多,我把它放在:https://pan.quark.cn/s/72b05047b482看下效果图:这段代码是一个基于HTML5Canvas的游戏,下面是对代码中关键部分的注释:```javascript//设置页面的边距为0,并且隐藏滚动条document.body.style.margin='0px';documen......
  • 手写js new,new的过程到底发生了什么
    在JavaScript中,new关键字的应用可以说是再平常不过了,最基础的有newArray()、newSet(),再而就是new一个自己创建的构造函数,也就是创建一个该构造函数的示例。如:varperson1=newPerson("一颗苹果",18);但你是否真的了解new以及它的底层原理呢,本文将举出几个例子并且手写一个n......