当前位置: 首页 > news >正文

HTMLElement.click()的回调触发踩坑

先看看以下代码

const el = document.getElementById("btn")
el.addEventListener("click", () => {Promise.resolve().then(() => console.log("microtask 1"));console.log("1");
});
el.addEventListener("click", () => {Promise.resolve().then(() => console.log("microtask 2"));console.log("2");
});

点击按钮后,分别进入两个回调,进入第一个回调时,先加到微任务,然后打印 1。
每个宏任务之间会先清空所有微任务,因此打印顺序是 1- 》 microtask1- 》 2-》 microtask2。

那如果按钮点击不是用户触发,而是代码触发呢?

const el = document.getElementById("btn")
el.addEventListener("click", () => {Promise.resolve().then(() => console.log("microtask 1"));console.log("1");
});
el.addEventListener("click", () => {Promise.resolve().then(() => console.log("microtask 2"));console.log("2");
});
el.click()

按理说输出应该一样才对,但输出竟然变了!
在这里插入图片描述
是 click 这个函数有什么特别吗?
问了下 gpt,说是 click 会立即把回调同步执行的,那就符合预期了。
在这里插入图片描述

在这里插入图片描述

而当按钮是用户点击触发时,回调就分为多个宏任务触发了。
在这里插入图片描述

http://www.lryc.cn/news/307005.html

相关文章:

  • mysql锁-这条sql加了哪些锁
  • Docusaurus框架——快速搭建markdown文档站点介绍sora
  • Prompt 编程的优化技巧
  • React PureComponent 和 React.memo()区别
  • CentOS 7全系列免费
  • 【Spring连载】使用Spring Data访问 MongoDB----Aggregation Framework支持
  • 【深入理解设计模式】适配器设计模式
  • ASP.NET-实现图形验证码
  • 解决Maven爆红以及解决 Idea 卡在 Resolving问题
  • MySQL集群 双主架构(配置命令)
  • 网络安全之安全事件监测
  • 【BUG 记录】MyBatis-Plus 处理枚举字段和 JSON 字段
  • Web性能优化-详细讲解与实用方法-MDN文档学习笔记
  • 组态王连接施耐德M580PLC
  • pop链构造 [NISACTF 2022]babyserialize
  • 【VIP专属】Python应用案例——基于Keras, OpenCV和MobileNet口罩佩戴识别
  • Doris——荔枝微课统一实时数仓建设实践
  • Stable Diffusion 绘画入门教程(webui)-ControlNet(Inpaint)
  • LeetCode146: LRU缓存
  • 【ArcGIS】基于DEM/LUCC等数据统计得到各集水区流域特征
  • vue3中安装并使用CSS预处理器Sass的方法介绍
  • 过滤器(Filter)
  • AMRT3D数字孪生引擎详解
  • Sqlite数据库详解
  • 基于YOLOv8深度学习+Pyqt5的电动车头盔佩戴检测系统
  • 【数据结构】B树,B+树,B*树
  • 常用实验室器皿耐硝酸盐酸进口PFA材质容量瓶螺纹盖密封效果好
  • 【kubernetes】二进制部署k8s集群之cni网络插件flannel和calico工作原理
  • Pycharm一直打不开,无任何报错
  • 用html编写的小广告板