前端面试题:1.页面加载完成(onload)之前触发的事件;2.History,Location,Window,Navigation的区别;3.e.target和e.currentTarget的区别

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: ★Navagator:提供有关浏览器的信息★Window: Window对象处于对象层次的最顶层,它提供了处理Navagator窗口的方法和属性★Location:提供了与当前打开的URL-工作的方法和属性,是一个静态的对象★History:提供了与历史清单有关的信息★Document:包含与文档元素一起工作的对象,它将这些元素封装起来供编程人员使用

文章目录
哪些事件会在页面加载完成(onload)之前触发?
History,Location,Window,Navigation的区别
e.target和e.currentTarget有什么区别?
冒泡 & 捕获
addEventListener
target & currentTarget
区别
哪些事件会在页面加载完成(onload)之前触发?
readystatechange
document有readyState属性来描述document的loading状态,readyState的改变会触发readystatechange事件.
1、loading
文档仍然在加载
2、interactive
文档结束加载并且被解析,但是像图片,样式, frame之类的子资源仍在加载
3、complete
文档和子资源已经结束加载,该状态表明将要触发load事件。
因此readystatechange在onload之前触发。

DOMContentLoaded
当初始的HTML文档被完全加载和解析完成之后,DOMContentLoaded事件被触发,而无等待样式表、图像和子框架的完成加载。
另一个不同的事件load应该仅用于检测一个完全
加载的页面。因此DOMContentI oaded是HTML完全加载和解析完成之后发生的,发生时间点要早于load
在使用DOMContentLoaded更加合适的情况下使
用load是一个令人难以置信的流行的错误,所以要谨慎。
注意: DOMContentI oaded事件必须等待其所属
script之前的样式表加载解析完成才会触发。

History,Location,Window,Navigation的区别
★Navagator:提供有关浏览器的信息
★Window: Window对象处于对象层次的最顶层,
它提供了处理Navagator窗口的方法和属性
★Location:提供了与当前打开的URL-工作的方
法和属性,是一个静态的对象
★History:提供了与历史清单有关的信息
★Document:包含与文档元素一起工作的对象,它将这些元素封装起来供编程人员使用

e.target和e.currentTarget有什么区别?
冒泡 & 捕获
当你触发一个元素的事件的时候,该事件从该元素的祖先元素传递下去,此过程为捕获,而到达此元素之后,又会向其祖先元素传播上去,此过程为冒泡

addEventListener
addEventListener是为元素绑定事件的方法,他接收三个参数:
第一个参数:绑定的事件名
第二个参数:执行的函数
第三个参数:false:默认,代表冒泡时绑定;true:代表捕获时绑定

target & currentTarget
我们给四个div元素绑定事件,且addEventListener第三个参数不设置,则默认设置为false

const a = document.getElementById('a')
const b = document.getElementById('b')
const c = document.getElementById('c')
const d = document.getElementById('d')
a.addEventListener('click', (e) => {
const {

target,
currentTarget

} = e
console.log(target是${target.id})
console.log(currentTarget是${currentTarget.id})
})
b.addEventListener('click', (e) => {
const {

target,
currentTarget

} = e
console.log(target是${target.id})
console.log(currentTarget是${currentTarget.id})
})
c.addEventListener('click', (e) => {
const {

target,
currentTarget

} = e
console.log(target是${target.id})
console.log(currentTarget是${currentTarget.id})
})
d.addEventListener('click', (e) => {
const {

target,
currentTarget

} = e
console.log(target是${target.id})
console.log(currentTarget是${currentTarget.id})
})

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
现在我们点击,看看输出的东西,可以看出触发的是d,而执行的元素是冒泡的顺序

target是d currentTarget是d
target是d currentTarget是c
target是d currentTarget是b
target是d currentTarget是a
1
2
3
4
我们把四个事件第三个参数都设置为true,我们看看输出结果,可以看出触发的是d,而执行的元素是捕获的顺序

target是d currentTarget是a
target是d currentTarget是b
target是d currentTarget是c
target是d currentTarget是d
1
2
3
4
区别
e.target:触发事件的元素
e.currentTarget:绑定事件的元素

目录
相关文章
|
1月前
|
监控 前端开发 JavaScript
前端工程化和传统前端开发的区别是什么?
前端工程化相比传统前端开发,在开发模式、代码组织与管理、构建与部署流程、团队协作、性能优化以及技术选型等方面都有了显著的改进和提升,能够更好地应对现代前端应用开发的复杂性和高要求。
|
22天前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
55 14
|
21天前
|
Java 关系型数据库 数据库
京东面试:聊聊Spring事务?Spring事务的10种失效场景?加入型传播和嵌套型传播有什么区别?
45岁老架构师尼恩分享了Spring事务的核心知识点,包括事务的两种管理方式(编程式和声明式)、@Transactional注解的五大属性(transactionManager、propagation、isolation、timeout、readOnly、rollbackFor)、事务的七种传播行为、事务隔离级别及其与数据库隔离级别的关系,以及Spring事务的10种失效场景。尼恩还强调了面试中如何给出高质量答案,推荐阅读《尼恩Java面试宝典PDF》以提升面试表现。更多技术资料可在公众号【技术自由圈】获取。
|
24天前
|
Web App开发 SQL 前端开发
前端页面加载性能指标之LCP
本文介绍了 Largest Contentful Paint (LCP),一种衡量网页加载性能的指标,专注于视口内最大图片或文本块的完全渲染时间,旨在提升用户对主要内容加载速度的感知。文章还探讨了LCP的测量方法和优化策略,如图像优化、懒加载等,以帮助改善网页性能。
74 5
|
1月前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
1月前
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
66 1
|
2月前
|
Android开发
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
|
2月前
|
Android开发
Android面试高频知识点(1) 图解 Android 事件分发机制
Android面试高频知识点(1) 图解 Android 事件分发机制
45 1
|
2月前
|
XML 前端开发 Android开发
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
|
2月前
|
编译器
经典面试题:变量的声明和定义有什么区别
在编程领域,变量的“声明”与“定义”是经典面试题之一。声明告诉编译器一个变量的存在,但不分配内存,通常包含变量类型和名称;而定义则为变量分配内存空间,一个变量必须至少被定义一次。简而言之,声明是告知变量形式,定义则是实际创建变量并准备使用。
下一篇
DataWorks