JavaScript事件

DOM事件

  • 事件概念:事件是文档或浏览器中发生的交互行为的响应。
  • 事件流:分为三个阶段:
    • 捕获阶段:事件从根节点开始,逐级向下传播至目标节点。
    • 目标阶段:事件在目标节点上被处理。
    • 冒泡阶段:事件从目标节点逐级向上传播至根节点。
事件模型
  • 原始事件模型(DOM0级事件)

    • 特点:跨浏览器兼容性好,事件绑定快速,仅支持冒泡,同类型事件只能绑定一个。
    • 绑定方式:HTML属性(如 onclick)、JavaScript属性赋值。
    • 解绑方式:将事件处理器设置为 null
  • 标准事件模型(DOM2级事件)

    • 特点:允许添加多个同类型事件,可以控制事件在捕获/冒泡阶段执行。
    • 绑定方式:addEventListenerremoveEventListener(解绑时需传入相同的函数引用和触发时机)。
事件委托
  • 使用场景:当多个子节点需要注册相同类型的事件时,可以在父节点上注册,利用事件冒泡。
  • 优点:减少内存使用,减少事件注册的工作量。

浏览器事件

  • 事件循环:JavaScript 引擎是单线程的,通过事件循环实现非阻塞。
  • 任务种类
    • 同步任务:直接在主线程中执行的任务。
    • 异步任务:注册回调函数后放入事件队列中等待执行。
异步任务
  • 微任务Promise.thenMutationObserverprocess.nextTick(Node.js)。
  • 宏任务:整体 <script> 代码、setTimeout/setInterval、用户触发的 DOM 事件、网络请求、I/O 事件(Node.js)、setImmediate(Node.js)。
async/await
  • async:声明异步函数,返回值为 Promise 对象。
  • await:在 async 函数中使用,等待表达式执行完成后继续执行后续代码。

Node.js 事件循环

事件循环机制

Node.js 的事件循环是基于 libuv 库实现的,它为 Node.js 提供了一个异步非阻塞I/O的环境。事件循环负责调度和执行所有的回调函数。

异步任务分类

在 Node.js 中,异步任务分为微任务(microtasks)和宏任务(macrotasks)。

微任务(Microtasks)
  • nextTick queue:这是最高优先级的队列,用于 process.nextTick 方法的回调。
  • other queue:包含其他微任务,如 Promise 的 .then() 方法。
宏任务(Macrotasks)
  • timer queue:定时器任务,如 setTimeout 和 setInterval
  • poll queue:轮询阶段,用于执行 I/O 操作,如文件读写和网络请求。
  • check queue:检查阶段,用于执行 setImmediate 方法的回调。
  • close queue:关闭阶段,如关闭网络连接时的回调。
事件循环的执行顺序
  1. 执行所有微任务:在执行完一个宏任务后,事件循环会检查微任务队列,并执行其中的所有任务,直到队列为空。
  2. 执行一个宏任务:事件循环从当前宏任务队列中取出一个任务执行。
  3. 进入下一个阶段:事件循环进入下一个阶段,并执行该阶段对应的宏任务队列中的任务。
特殊注意点
  • 快照机制:在事件循环的每个阶段开始时,会对宏任务队列进行快照,然后按照快照队列的顺序执行任务。在执行过程中,新加入的任务不会影响当前的快照。
  • 微任务执行顺序:首先执行 nextTick queue 中的所有回调,然后执行 other queue 中的所有回调。
  • 宏任务队列的遍历顺序:按照 timerpollcheckclose 的顺序进行。
  • 定时器精度:如果 setTimeout 或 setInterval 设置的延迟为 0ms,实际上会被 Node.js 强制设置为 1ms。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/417165.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python作为客户端连接websocket

缘起 因为需要将MQTT中的数据推送给前端,但是前端不会直接连接MQTT,所以服务端做了一个中间层,通过websocket推送,但是在开发的过程中前端总是认为推送的数据不及时,所以这里又实用Python单独做了一个客户端做时间记录验证。开始吧 安装三方包 Python的生态很方便,这里…

java编程实现ElGamal的加密和解密题目实例

1.题目 编程实现ElGamal的加密和解密&#xff0c;假设用户A选择素数p11和本原根g2&#xff0c;并且选择私钥α5&#xff0c;输出A的公钥&#xff1b;若用户B向用户A发送消息m6&#xff0c;随机数k7&#xff0c;输出对该消息加密后的密文&#xff0c;以及对密文进行解密的明文。…

上海晋名室外危化品暂存柜助力新能源行业发展

近日又有一个SAVEST室外危化品暂存柜项目成功验收交付使用。 用户在日常经营活动中涉及到气瓶和硅粉的室外安全暂存问题&#xff0c;4月下旬在网上看到上海晋名室外暂存柜系列很感兴趣&#xff0c;联系到了销售部钟经理&#xff0c;双方对晋名的室外暂存柜进行了高效的沟通&am…

cesium 使用异步函数 getHeightAtPoint,获取指定经纬度点的地形高度。

这个函数使用 CesiumJS 库的 sampleTerrain 方法来获取地形数据。下面是代码的详细解释&#xff1a; async getHeightAtPoint(LngLat) {// 将经纬度转为 Cartographic 对象let cartographics [Cesium.Cartographic.fromDegrees(LngLat[0], LngLat[1])];// console.log("…

Day 3 - 5 :线性表 — 单链表

存储结构 将线性表中的各元素分布在存储器的不同存储块&#xff0c;称为结点。 结点的data域存放数据元素ai&#xff0c;而next域是一个指针&#xff0c;指向ai的直接后继ai1所在的结点。 如果要删除a1&#xff0c;只要修改a1前手元素指针的指向即可。 例如&#xff1a;需要找到…

内存管理篇-22 高端内存和低端内存的分界线

这节课讲的主是为了区分低端内存和高端内存的是如何区分的&#xff1f;内核空间的划分是可以配置的。为了查看现象&#xff0c;通过qemu设置物理内存为不同情况。 结论&#xff1a;线性映射区的大小&#xff0c;和page_offset(内核起始地址0x80000000还是0xc0000000)和物理内存…

JavaEE(2):前后端项目之间的交互

现在&#xff0c;在网页中通过超链接&#xff0c;表单就可以向后端发送请求&#xff0c;后端也可以正常响应内容。 以前通过表单访问后端的请求方式称为同步请求 同步请求 当网页与后端交互时&#xff0c;前端不能再进行其他操作 服务器端响应回来的内容&#xff0c;会把整个浏…

2024年高教社杯数学建模国赛赛题浅析——助攻快速选题

一图流——一张图读懂国赛 总体概述&#xff1a; A题偏几何与运动学模型&#xff0c;适合有几何与物理背景的队伍&#xff0c;数据处理复杂性中等。 B题侧重统计和优化&#xff0c;适合有运筹学和经济学背景的队伍&#xff0c;数据处理较为直接但涉及多步骤的决策优化。 C题…

云计算实训39——Harbor仓库的使用、Docker-compose的编排、YAML文件

一、Harbor部署 1.验证python版本 [rootdocker2 ~]#python --version 2.安装pip [rootdocker2 ~]# yum -y install python2-pip #由于版本过低&#xff0c;需要对其进行一个升级 #更新pip [rootdocker2 ~]#pip install --upgrade pip 3.指定版本号 [rootdocker2 ~]# p…

SpringBoot实现前后端传输加密设计

在Web应用中&#xff0c;确保前后端之间的数据传输安全是非常重要的。这通常涉及到使用HTTPS协议、数据加密、令牌验证等安全措施。本文通过将前后端之间的传输数据进行加密&#xff0c;用于在Spring Boot应用中实现前后端传输加密设计。 一、数据加密方案 即使使用了HTTPS&…

安防监控视频打手机检测算法核心技术打手机检测算法源码、模型简介

在数字化的今天&#xff0c;智能手机几乎已成为人们生活中不可或缺的一部分。然而&#xff0c;手机的广泛使用也带来了一些挑战&#xff0c;比如在公共场所、教育机构和工作环境中的手机干扰。为了解决这些问题&#xff0c;打手机检测算法应运而生&#xff0c;成为管理人员和机…

足底筋膜炎怎么治疗才能除根

一、足底筋膜炎的引起原因&#xff0c;足底筋膜炎是一种常见的足部疾病&#xff0c;其引起原因多样&#xff0c;主要包括以下几个方面&#xff1a; 1、过度使用&#xff1a;长时间站立、行走或跑步等活动&#xff0c;特别是当这些活动超出了足底筋膜的承受能力时&#xff0c;会…

毒枸杞事件启示录:EasyCVR视频AI智能监管方案如何重塑食品卫生安全防线

一、方案背景 近年来&#xff0c;食品安全问题频发&#xff0c;引发了社会各界的广泛关注。其中&#xff0c;毒枸杞事件尤为引人关注。新闻报道&#xff0c;在青海格尔木、甘肃靖远等地&#xff0c;部分商户为了提升枸杞的品相&#xff0c;违规使用焦亚硫酸钠和工业硫磺进行“…

Android Telephony总结

1、Telephony 业务介绍 Android telephony涉及较多模块 1.1、STK业务介绍 1.1.1、STK域选 1.1.2、是否支持STK Telephon STK-CSDN博客 1.1.3、STK应用的安装卸载 1.2、SS补充业务 1.3、通话业务 1.3.1、紧急号码 ECC 号码总结_ecc号码-CSDN博客 1.4、SMS 1.4.1 短信发送方式…

vue3 VueUse useElementVisibility 来监听某一个元素或者div是否在当前视口viewport中可见。

1、先上一个图&#xff1a; 2、安装vueuse/core pnpm add vueuse/core 3、新建一个组件&#xff1a; <script setup lang"ts"> import { ref, watch } from "vue"; import { useElementVisibility } from "vueuse/core";const target re…

备考MS office 二级

word 1、分页符 布局-分隔符-分节符-下一页&#xff1a;第二张可以不同纸张大小、方向等 2、调整宽度&#xff1a;新文字宽度&#xff08;字符宽度&#xff09; 中文版式 3、字符间距 4、文本转换为表格 1、把 || 替换为逗号&#xff0c;方便查找 5、首字下沉 插入 - 首字下沉…

便宜好用的云手机盘点

云手机作为一种新型远程计算服务&#xff0c;凭借其便利性、高效性和可扩展性&#xff0c;迅速成为了用户的热门选择。然而&#xff0c;面对市场上众多的云手机品牌&#xff0c;如何选择一款性价比高且体验良好的云手机&#xff1f;本文将为您盘点几款便宜好用的云手机产品。 雷…

Avalonia 播放 VLC 视频(Windows / Linux)

【演示效果】 一、开发步骤 1. 版本与引用类库 Avalonia 版本:11.0.11 Windows上只需要安装以下类库: LibVLCSharp 3.8.5 LibVLCSharp.Avalonia 3.8.5 VideoLAN.LibVLC.Windows 3.0.20 引用截图: 2. 前端代码 <UserControl xmlns="https://github.com/avaloni…

windows手工杀毒-寻找可疑进程之进程模块

上篇回顾&#xff1a;windows手工杀毒-寻找可疑进程之进程启动文件-CSDN博客 上篇我们介绍了如何通过进程启动文件寻找可疑进程&#xff0c;首先我们查看文件的数字签名&#xff0c;如果签名是合法的&#xff0c;且是正规公司的证书。基本可疑排除进程是可疑进程&#…

pnpm国内源设置

一、背景 在国内使用pnpm时&#xff0c;由于网络问题&#xff0c;经常会遇到速度慢或无法访问的问题。为了提高效率&#xff0c;可以将pnpm的源设置为国内的镜像源。以下是一些常用的国内pnpm镜像源以及如何设置它们的方法。 二、国内可用源 2.1 淘宝pnpm源 https://registry…