用户页面触发点击事件和 js 执行点击事件的区别

news2024/11/26 10:51:49

文章目录

    • 情景展示
      • 情况一:用户点击页面触发
      • 情况二:通过 js 触发点击
    • 结果分析
      • 情况一
      • 情况二

其实这个谜底揭开之后,第一反应都是,哦~,非常简单,但是细节决定成败,我被这个细节毁掉了,所以仅以此篇记录我这次的“折戟沉沙”

情景展示

情况一:用户点击页面触发

btn.addEventListener('click', () => {
	Promise.resolve().then(() => {
		console.log('microtask-1')
	})
	console.log('点击了1')
})

btn.addEventListener('click', () => {
	Promise.resolve().then(() => {
		console.log('microtask-2')
	})
	console.log('点击了2')
})

输出如图:

QQ202458-113949-HD-ezgif.com-video-to-gif-converter

情况二:通过 js 触发点击

btn.addEventListener('click', () => {
	Promise.resolve().then(() => {
		console.log('microtask-1')
	})
	console.log('点击了1')
})

btn.addEventListener('click', () => {
	Promise.resolve().then(() => {
		console.log('microtask-2')
	})
	console.log('点击了2')
})

btn.click()

输出结果如图:

image-20240508114239236

结果分析

情况一

两者不一致的原因其实也简单,用户点击触发的时候,并不在执行栈中发生具体的代码执行,仅仅是发送了一个点击事件而已,所以在第一个侦听器触发时,会打印点击1,然后将 microtask-1 加入微队列,图解如下:

image-20240508120140351

此时由于执行栈为空,那么就会立即取出微队列的任务进行执行,即输出microtask-1,第二个侦听器同理,打印点击了2,然后直接取出微任务执行,打印 microtask-2

情况二

通过 js 触发的点击事件,首先会在栈中加入一个 btn.click 的任务,执行侦听器1打印点击了1之后,就会把macrotask-1加入微队列,此时执行栈是存在任务的,所以不会直接取出微队列执行。

继续执行侦听器2,打印点击了2之后,将macrotask-2加入微队列,此时点击事件执行完成,执行栈就是空的,所以会直接取出微队列里面的任务执行,依次打印 macrotask-1、macrotask-2,图解如下:

image-20240508122255780

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker资源限额

多数的应⽤场景要对Docker容器的运⾏内存进⾏限制,防⽌其使⽤过多的内存。 格式:-m或--memory 正常的内存大小 [rootadmin ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS …

硬件设计——滤波器设计_MIC用有源带通滤波器

“在已有的成熟稳定的滤波器基础上,根据业务需要对原设计进行优化调整以得到新的滤波器” 是滤波器设计的一种常用方法。 MIC用有源带通滤波器 介绍一种简单直观的带通滤波器以及计算过程,以作未来可参考的基线设计。该滤波器可用于音频信号&#xff0…

【算法】基础算法004之前缀和

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 🌝每一个不曾起舞的日子,都是对生命的辜负 前言 本篇文章为大家带来前缀和…

【EI会议|投稿优惠】2024年物理化学与应用数学国际会议(IACPCAM 2024)

2024 International Conference on Physical Chemistry and Applied Mathematics 一、大会信息 会议名称:2024年物理化学与应用数学国际会议会议简称:IACPCAM 2024收录检索:提交Ei Compendex,CPCI,CNKI,Google Scholar等会议官网:…

基于树莓派的六足机器人方案设计+源代码+工程内容说明

文章目录 源代码下载地址项目介绍项目内容说明简单预览 项目备注源代码下载地址 源代码下载地址 点击这里下载源码 项目介绍 项目内容说明 hardware为项目相关硬件设计 机械结构为六足机器人的3d建模工程,包括本体和云台遥控器在ESP32最小开发板上集成了MPU605…

Python面向对象编程思想的深入学习

魔术方法的使用 案例体验 class Student:def __init__(self, name, age):self.name nameself.age age# __str__魔术方法, 如果不去写这个方法,那么print输出的则是信息存储的内存地址。def __str__(self):return fStudent类对象,name:{self.name}, ag…

入门视频剪辑:视频合并不再难,批量嵌套合并的简单步骤

在数字媒体时代,视频剪辑已成为一项基本技能。无论是制作家庭电影、公司宣传片还是在线教育内容,视频剪辑都扮演着重要角色。对于初学者来说,视频剪辑可能看起来有些复杂,但掌握了正确的步骤和技巧后,你会发现它其实并…

【资源分享】PyCharm2020安装教程

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验,帮助大家尽早适应研究生生活,尽快了解科研的本质。祝一切顺利!—…

了解外汇震荡类货币对特征与交易策略

外汇市场是全球最大的金融市场,每天的交易量超过6万亿美元。在这个市场上,货币对之间的价格变动反映了全球经济和政治动态。外汇货币对通常被分为三类:主要货币对、次要货币对和外来货币对。而在交易这些货币对时,市场表现通常分为…

MATLAB实现遗传算法优化同时取送货的车辆路径问题VRPSDP

同时取送货的车辆路径问题VRPSDP的数学模型如下: 模型假设 所有车辆的载重、容量等性能相同。每个客户的需求(送货和取货量)是已知的,且在服务过程中不会改变。车辆的行驶速度恒定,不考虑交通拥堵等实时路况变化。每个客户点只能…

记录一个RSA加密js逆向

network调试就不说了吧 pwd加密参数 搜索pwd参数定位逆向 可以看到有很多关键词 但是我们细心的朋友会发现加密函数关键字 encrypte 打上断点 调试 发现在断点处停止了 并且框选函数发现了一串加密值 虽然不一样但是大概率是这个 并且没你每次放置移开都会刷新 所以如果这个就是…

IP地址定位技术在网络安全中的作用

在当今数字化时代,网络安全已经成为企业、政府和个人面临的重要挑战之一。随着互联网的普及和网络攻击的增加,保护个人隐私和防止网络犯罪变得尤为重要。在这一背景下,IP地址定位技术作为网络安全的重要组成部分之一,发挥着关键作…

citylava:城市场景中VLMs的有效微调

citylava:城市场景中VLMs的有效微调 摘要IntroductionRelated WorkVision-Language ModelsVLMs in Driving Methodology CityLLaVA: Efficient Fine-Tuning for VLMs in City Scenario 摘要 在城市广阔且动态的场景中,交通安全描述与分析在从保险检查到事故预防的各…

C++——list和string

list与string 前言一、listlist.hList的节点类List的迭代器类list类list.h 完整实现 list.cppList的节点类List的迭代器类list类list.cpp 完整实现 二、stringstring.hstring.cpp 总结 前言 C容器的学习开始啦! 大家先来学习list! 紧接着string和vector…

如何查看打包后的jar包启动方法

背景 有时候我们在引用一个jar包的时候,想查看一个jar包的结构,这时候查看启动类就比较重要,因为一些关键配置是在启动类上的,这里教大家如何查看这个启动类(springboot项目) 步骤 首先打开jar包预览结构,可以使用解压缩工具直接双击打开或者预览结构 打开路径 META-INF/MA…

《挑战100个产品拆解:抖音》

抖音,作为当今社交媒体领域的明星产品,其背后的产品思维一直备受关注。在这篇文章中,我们将深入拆解抖音的产品思维,揭示其成功的秘密。 产品定位 1.产品是什么样的用户: 年轻人和青少年是抖音的主要用户群体。抖音…

Agent AI智能体:塑造未来社会的智慧力量

🔥 个人主页:空白诗 文章目录 🤖 Agent AI智能体:塑造未来社会的智慧力量🎯 引言🌱 智能体的未来角色预览💼 行业革新者🌟 创意合作者🛡️ 公共安全与环保🚀 …

pycharm code行太长显示波浪线取消

实际操作如下:个人比较合适的位置为160,180时有点多 效果:

演唱会新风:允许部分歌手闭麦,让观众先唱

演唱会市场的热度从2023年延续至今,出现了一些“倒反天罡”的现象。 例如:让歌迷在台下给歌手唱歌。 5月6日抖音娱乐榜第一的消息是“第一次见辟谣观众没假唱的”。原因是凤凰传奇在常州和北京鸟巢先后举办两场演唱会,其中鸟巢演唱会被认为…

嵌入式C语言高级教程:实现基于STM32的人工智能语音识别系统

在嵌入式系统中实现语音识别技术可以极大地增强设备的交互性。本教程将指导您如何在STM32微控制器上使用TensorFlow Lite for Microcontrollers实现基本的语音识别功能。 一、开发环境准备 硬件要求 微控制器:STM32F746NG,支持足够的运算能力和内存来…