【前端 · 面试 】JavaScript 之你不一定会的基础题(一)

最近我在做前端面试题总结系列,感兴趣的朋友可以添加关注,欢迎指正、交流。

争取每个知识点能够多总结一些,至少要做到在面试时,针对每个知识点都可以侃起来,不至于哑火。

JavaScript 之你不一定会的基础题

前言

面试往往就是博弈的一个过程,但是如果你手中的筹码不够丰厚,那结局大概不会怎么理想。而筹码的增加往往依赖于我们日积月累的输入。

哪怕再小的一个问题,只要你愿意沉下心来往下钻,最后得到的可能是一片森林。

今天我要记录的这个问题,虽然比较基础,但是,内涵却是一点都不少!

题目

有如下的 HTML 文档结构:

<div id="parent"><child id="child" class="child">点我</child>
</div>

第一次执行如下 JavaScript 代码:

document.getElementById("parent").addEventListener("click", function () {alert(`parent 事件触发,` + this.id);
});document.getElementById("child").addEventListener("click", function () {alert(`child 事件触发,` + this.id);
});

第二次执行另一套 JavaScript 代码:

document.getElementById("parent").addEventListener("click", function (e) {alert(`parent 事件触发,` + e.target.id);
});document.getElementById("child").addEventListener("click", function (e) {alert(`child 事件触发,` + e.target.id);
});

第三次再执行一套:

document.getElementById("parent").addEventListener("click", function (e) {alert(`parent 事件触发,` + e.target.id);
}, true);document.getElementById("child").addEventListener("click", function (e) {alert(`child 事件触发,` + e.target.id);
}, true);

问题如下:

点击 id 为 child 的 div 后,这三份 JavaScript 代码的执行结果分别是什么?

题外话

这道题目涉及到的内容和知识点都很基础,无非就是事件捕获、事件触发、事件冒泡再加上 addEventListener 接口中的第三个参数的含义而已。

只要对 JavaScript 基础知识掌握得较为牢固,那么这题就是送分题,轻松加愉快;可一旦对这一块的知识有盲点,那就成了送命题了,且行且珍惜。

DOM 元素事件执行顺序

HTML 页面上 DOM 元素的事件执行顺序一般有三个阶段:

  • 事件捕获
  • 事件触发
  • 事件冒泡

借用网上的一张图来说明一下这个过程:

image-20210812202737932

dom标准事件流的触发的先后顺序为:先捕获再冒泡,即当触发dom事件时,会先进行事件捕获,捕获到事件源之后通过事件传播进行事件冒泡。

而在浏览器中默认执行的是事件冒泡,即我们一般观察不到事件捕获阶段,比如 onclick 等事件。

如果想要观察到事件的捕获阶段,那我们就需要借助 addEventListener 接口来实现。

关于addEventListener()

addEventListener 的基本语法为:

target.addEventListener(type, listener, useCapture);
  • type 事件类型。
  • listener 事件触发实际执行的匿名函数。
  • userCapture 可选,类型为 Boolean,意思是是否执行事件捕获阶段

关于 listener 中的 this 和 target

  • 当一个 EventListener 在 EventTarget 正在处理事件的时候被注册到 EventTarget 上,它不会被立即触发,但可能在事件流后面的事件触发阶段被触发,例如可能在捕获阶段添加,然后在冒泡阶段被触发。
  • 通常来说 this 的值是触发事件的元素的引用,当使用 addEventListener() 为一个元素注册事件的时候,句柄里的 this 值是该元素的引用。其与传递给句柄的 event 参数的 currentTarget 属性的值一样。

解题

通过以上分析,我们应该可以得到那道题的答案了:

  • 第一次结果为:先弹出“child 事件触发,child”,再弹出“parent 事件触发,parent”。
  • 第二次结果为:先弹出“child 事件触发,child”,再弹出“parent 事件触发,child”。
  • 第三次结果为:先弹出“parent 事件触发,child”,再弹出“child 事件触发,child”。

总结

题目不难,涉及到的知识点更是初级,但是,细节一定需要注意!

~

~本文完,感谢阅读!

~

学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂!

大家好,我是〖编程三昧〗的作者 隐逸王,我的公众号是『编程三昧』,欢迎关注,希望大家多多指教!

你来,怀揣期望,我有墨香相迎! 你归,无论得失,唯以余韵相赠!

知识与技能并重,内力和外功兼修,理论和实践两手都要抓、两手都要硬!



喜欢的朋友记得点赞、收藏、关注哦!!!

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

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

相关文章

Windows蓝屏问题解决(电脑只要安装了VPN_SV独立客户端)必蓝屏

一、SERNEL_SECURITY_CHECK_FAILURE (139) 蓝屏分析 官方介绍蓝屏现象&#xff0c;官方Windows为了保护电脑&#xff0c;出现故障&#xff0c;自动蓝屏&#xff0c;避免损坏电脑的一种现象&#xff0c;别名buckcheck、蓝屏。 100%复现软件&#xff1a;天融信VPN&#xff0c;同事…

为了方便写CURD代码,我在UTools写了个插件SqlConvert来生成代码!

-1. 前言 为了方便摸鱼&#xff0c;我之前写过一个通过sql生成代码的工具&#xff0c;但是服务器到期了&#xff0c;也就懒得重新部署了。 技术框架是 SpringBoot MybatisPlus Velocity Vue ElementUI Sql-ParseeSql-Parser-ui 0. Utools应用安装 官网地址: https://u.too…

【HZHY-AI300G智能盒试用连载体验】使用YOLOv8进行车辆流量监测

目录 YOLOv8的RKNN模型 程序的部署 流量统计 本文首发于电子发烧友论坛&#xff1a;【新提醒】【HZHY-AI300G智能盒试用连载体验】 智能工业互联网网关 - 北京合众恒跃科技有限公司 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com) 环境准备好之后&#xff0c;接…

福建聚鼎:现在装饰画好做吗

在当今社会&#xff0c;随着人们审美情趣的提升和生活品质的改善&#xff0c;家居装饰画已经成为了一种流行的墙面装饰方式。许多人都在思考&#xff0c;现在做装饰画是否是一个好时机? “逆水行舟&#xff0c;不进则退。”在日新月异的市场中&#xff0c;装饰画行业的竞争愈发…

商用密码测评之对HTTPS(TLS)协议中各个参数解释

1、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 是一个广泛使用的TLS&#xff08;传输层安全协议&#xff09;加密套件&#xff0c;它结合了多种技术和算法来确保网络通信的安全。下面是对该加密套件中各个参数的详细解释&#xff1a; 1. TLS 定义&#xff1a;TLS&#xff08;传…

JMeter 使用

1.JMeter 是什么&#xff1f; JMeter 是一款广泛使用的开源性能测试工具&#xff0c;由 Apache 软件基金会维护。它主要用于测试 Web 应用程序的负载能力和性能&#xff0c;但也支持其他类型的测试&#xff0c;如数据库、FTP、JMS、LDAP、SOAP web services 等。 2.特点&#x…

Infuse Pro for Mac全能视频播放器

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功 三、运行测试安装完成&#xff01;&#xff01;&#xff01; 效果 一、下载软件 下载软件…

Qt系统机制

Qt系统 Qt文件概述输入输出设备类QFileQFileInfoQt多线程Qt多线程常用API使用Qt多线程 线程安全互斥锁读写锁条件变量信号量 Qt网络QUdpSocketQNetworkDatagram设计一个UDP回显服务器QTcpServerQTcpSocketTcp版本的回显服务器HttpClient核心API Qt 音频Qt视频 Qt文件概述 ⽂件操…

【C++BFS】1020. 飞地的数量

本文涉及知识点 CBFS算法 LeetCode1020. 飞地的数量 给你一个大小为 m x n 的二进制矩阵 grid &#xff0c;其中 0 表示一个海洋单元格、1 表示一个陆地单元格。 一次 移动 是指从一个陆地单元格走到另一个相邻&#xff08;上、下、左、右&#xff09;的陆地单元格或跨过 gr…

【C++初阶】string类

【C初阶】string类 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;C&#x1f96d; &#x1f33c;文章目录&#x1f33c; 1. 为什么学习string类&#xff1f; 1.1 C语言中的字符串 1.2 实际中 2. 标准库中的string类 2.1 string类 2.…

前缀表达式(波兰式)和后缀表达式(逆波兰式)的计算方式

缀是指操作符。 1. 前缀表达式&#xff08;波兰式&#xff09; &#xff08;1&#xff09;不需用括号&#xff1b; &#xff08;2&#xff09;不用考虑运算符的优先级&#xff1b; &#xff08;3&#xff09;操作符置于操作数的前面。&#xff08;如 3 2 &#xff09; 1.1 中…

《Programming from the Ground Up》阅读笔记:p75-p87

《Programming from the Ground Up》学习第4天&#xff0c;p75-p87总结&#xff0c;总计13页。 一、技术总结 1.persistent data p75, Data which is stored in files is called persistent data, because it persists in files that remain on disk even when the program …

hash表如何形成,hash函数如何计算,什么是hash冲突 如何解决 ,Golang map的底层原理及扩容机制

散列表 散列表&#xff08;hash表&#xff09;:根据给定的关键字来计算出关键字在表中的地址的数据结构。也就是说&#xff0c;散列表建立了关键字和 存储地址之间的一种直接映射关系。 问题&#xff1a;如何建立映射管血 散列函数:一个把查找表中的关键字映射成该关键字对应…

oracle语法介绍

Oracle数据库是关系型数据库管理系统之一&#xff0c;其SQL语法遵循标准的SQL规范&#xff0c;但也有一些自己的扩展。以下是一些Oracle SQL语法的基本示例&#xff1a; 1.选择数据&#xff1a; SELECT * FROM my_table; 1.插入数据&#xff1a; INSERT INTO my_table (colum…

RocketMQ事务消息机制原理

RocketMQ工作流程 在RocketMQ当中&#xff0c;当消息的生产者将消息生产完成之后&#xff0c;并不会直接将生产好的消息直接投递给消费者&#xff0c;而是先将消息投递个中间的服务&#xff0c;通过这个服务来协调RocketMQ中生产者与消费者之间的消费速度。 那么生产者是如何…

【设计模式】工厂模式详解

1.简介 工厂模式是一种创建型设计模式&#xff0c;通过提供一个接口或抽象类来创建对象&#xff0c;而不是直接实例化对象。工厂模式的主要思想是将对象的创建与使用分离&#xff0c;使得创建对象的过程更加灵活和可扩展。 工厂模式主要包括以下角色&#xff1a; 抽象工厂&a…

地铁深基坑结构施工预警实时监测系统测点布设

01 基坑监测背景 随着我国城市建设的发展&#xff0c;基坑规模和开挖深度不断增加。在基坑开挖过程中&#xff0c;如何尽快的在第一时间了解基坑的变形情况&#xff0c;并动态评估基坑的结构安全&#xff0c;避免事故的发生。与其它监测方法相比&#xff0c;实现自动化监测、信…

gradio 之页面布局

输出组件的可交互&#xff0c;默认垂直排列 import gradio as gr def greet(name):return "Hello " name "!" with gr.Blocks() as demo:name gr.Textbox(label"Name")# 不可交互# output gr.Textbox(label"Output Box")# 可交互…

超声波清洗机哪个品牌比较好耐用?好用的超声波清洗机推荐

随着科技的发展&#xff0c;超声波清洗机已经慢慢出现在我们日常生活中了。像日常使用的小物品&#xff0c;如手表和首饰等&#xff0c;时间久了&#xff0c;难免会积累灰尘&#xff0c;滋生细菌。那么应该如何进行彻底清洁呢&#xff1f;超声波清洗机可以给我们答案&#xff0…

Move生态:从Aptos和Sui到Starcoin的崛起

区块链技术自诞生以来&#xff0c;已经经历了多个发展阶段和技术迭代。近年来&#xff0c;随着智能合约平台的不断演进&#xff0c;以Move语言为核心的生态系统逐渐崭露头角。Move语言以其安全性、灵活性和高效性吸引了大量开发者和项目方的关注。在Move生态中&#xff0c;Apto…