【面试笔记】说下事件模型

说下事件模型

1. 什么是事件和事件流

javascript 是事件驱动型语言。当用户在网页中进行某种操作时,就产生了一个“事件”(Event)。当事件发生时,JavaScript 可以对之做出响应,具体如何响应某个事件由编写的事件处理函数完成。

事件流描述的就是从页面中接收事件的顺序,早期 IE 和 Netscape 提出了完全相反的事件流概念,IE 事件流是事件冒泡,而Netscape的事件流就是事件捕获。

2. 冒泡和捕获的区别,触发顺序

IE 提出的事件流是事件冒泡,即从下至上,从目标触发的元素逐级向上传播,直到 window 对象。

Netscape 的事件流就是事件捕获,即从 document 逐级向下传播到目标元素。由于 IE 低版本浏览器不支持,所以很少使用事件捕获。

后来 ECMAScript 在 DOM2 中对事件流进行了进一步规范,基本上就是上述二者的结合。

DOM2级事件规定的事件流包括三个阶段: (1)事件捕获阶段 (2)处于目标阶段 (3)事件冒泡阶段

3. 冒泡和捕获的使用方式、应用场景
//给body侦听点击事件,冒泡阶段执行
 document.body.addEventListener("click", clickHandler);
 //给body侦听点击事件,捕获阶段执行
 document.body.addEventListener("click", clickHandler,true);
 //给body侦听点击事件,只执行一次
 document.body.addEventListener("click", clickHandler,{once:true});
// 事件侦听添加(注册事件)占有内存的,所以当删除对象时,一定要将对象上的侦听事件移除
 document.body.removeEventListener("click", clickHandler);

onclick支持IE低版本,addEventListener不支持IE8一下,低版本的IE使用 attachEvent 进行事件侦听;使用 detachEvent 移除事件侦听。

4. 如何阻止冒泡
e.stopPropagation();
e.cancelBubble=true // IE8及以下浏览器
5. 什么是事件委托

添加事件侦听(注册事件)占有内存的,尽量减少事件侦听的数量,将子元素的事件委托给父元素来执行,叫做事件委托。

事件委托利用的就是冒泡的原理。

当删除对象时,一定要将对象上的侦听事件移除,否则会造成内存泄露。

如果有多个DOM节点需要监听事件的情况下,给每个DOM绑定监听函数,会极大的影响页面的性能,因此我们通过事件委托来进行优化。

dom0、dom2、dom3事件: https://www.jianshu.com/p/3acdf5f71d5b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泡泡码客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值