即使没有连接侦听器,JavaScript中的事件也会被触发吗?
让我们说“mousemove”,我移动鼠标但整个应用程序中没有监听器,浏览器是否仍会构建一个新事件并触发它,或者它会优化并考虑如果没有事件监听器的事实,只是忽略数据。
我假设每个浏览器的工作方式不同,我假设他们使用像观察者这样的模式而不是什么模式,但有没有一个规则说明它应该如何?
答案 0 :(得分:6)
如果你认为这是不正确的,请随意投票,但根据我的理解,根据DOM Level 2 Events Spec,有一种感觉,事件总是被构建和执行但是听众需要在那里,当然,实际注册它们。
我之所以说“有一种感觉,事件总是被构造和执行”是因为规范提到
此方法允许在事件上注册事件侦听器 目标。如果将EventListener添加到EventTarget中 处理事件时,它不会被当前操作触发 但可能会在事件流程的后期阶段触发,例如 冒泡阶段。如果注册了多个相同的EventListener 具有相同参数的相同EventTarget重复实例 被丢弃了。它们不会导致EventListener被调用两次 因为它们被丢弃,所以不需要将它们移除 removeEventListener方法。
因此,如果动态添加事件侦听器,则需要有一种方法让页面知道注册和侦听它们。每个浏览器如何处理这个问题可能与上面提到的@JAAulde有所不同,但我认为浏览器不会针对事件监听器存在或不存在或至少没有激烈的事实进行优化。