微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 用addEventListener存储的事件在哪里存储?

我从一个空页开始.如果我运行document.body.onclick,我会得到null.如果我申请以下代码
document.body.onclick = function() { return "Click"; };

我得到函数(){return“点击”;当我运行document.body.onclick时.那讲得通!但是当我跑步的时候

document.body.addEventListener("click",function() { return "Click"; });

document.body.onclick仍为null,但在运行document.body.click()时输出为“Click”.

所以我的问题是,使用addEventListener时存储的函数在哪里?

解决方法

它存储在body的事件监听器的实际列表(数组)中.

元素的事件侦听器中包含一系列函数引用.这些引用不在DOM中.触发事件时,浏览器必须运行所有相应的元素,以查找这些引用并按顺序运行它们.

无论如何……在DOM没有看到的背景中有很多事情发生.整个事件系统就是其中之一.好吧,整个Javascript引擎本质上和当前加载页面的大对象树,都存储在神秘的内存中.通常使用文档和窗口接口访问它们,就像DOM一样.但正确注册的事件将存储在存储在内存中的大对象树中,这与DOM不同.只是密切相关.我将DOM视为这个大对象树和HTML本身之间的接口或中间人.

继续… onclick仅限于一个值或只是坐在DOM中的单个javascript字符串.实际上没有注册.所以,不是一个真正的事件监听器.在这里,DOM有点像垫片,因为它支持onclick字符串作为事件运行.因此,当触发事件时,此字符串也会运行.通过浏览器,在合适的时间,神秘.在一个回合的方式中,可以说这是DOM通常所做的一部分,它从HTML中填充所有内嵌文本,以便它可以通过文档访问.但通常,它们只是存储为字符串而不是树中的实际对象.这可能是DOM如此蓬勃发展的众多原因之一.

而addEventListenener实际上将其注册为真实事件,因此您可以:

>有倍数
>将它们作为对象访问
>随意添加删除它们
>选择事件传播方案
>在运行时控制事件传播本身
>首次运行后,事件会自动删除

……以及其他一些功能.

对于同一事件,它们都是两种不同的事件监听器.一个是使用addEventListener时的完整事件监听器.另一个是坐在DOM中的一串文本,浏览器将“在正确的时间”运行,但不是实际的完整事件监听器.

这个问题可能会有所启发…… addEventListener vs onclick

原文地址:https://www.jb51.cc/js/156763.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐