JavaScript事件是否总是被执行,即使没有人监听?

18

如果没有监听器,JavaScript中的事件是否总是会被触发?

例如,“mousemove”事件,即使整个应用程序中没有监听器,我移动鼠标,浏览器是否仍会构建新的事件并触发它,或者会进行优化,只考虑没有事件监听器的情况下忽略数据。

我假设每个浏览器的工作方式都不同,并且我假设它们使用像观察者等模式,但是是否有规范说明应该如何处理呢?


7
这就像是“森林中树木倒下是否有声音”的问题,但禁止使用麦克风... - Katana314
你是在询问浏览器事件吗? - Amit
这可以在不同的浏览器和引擎上以不同的方式处理。 - JAAulde
1个回答

7

如果您认为不正确,请随意给此内容投反对票,但根据我的理解和DOM Level 2 Events Spec的规定,事件总是会被构建和执行,但需要有监听器来实际注册它们。

我之所以说“有一种感觉事件总是被构建和执行”是因为该规范提到:

此方法允许在事件目标上注册事件侦听器。如果在EventTarget处理事件时向其添加EventListener,则当前操作不会触发它,但可能会在事件流的后续阶段(如冒泡阶段)触发。 如果使用相同参数在同一EventTarget上注册多个相同的EventListener,则会丢弃重复的实例。 它们不会导致EventListener被调用两次,并且由于它们被丢弃,因此无需使用removeEventListener方法将它们删除。

如果事件监听器是动态添加的,页面需要知道如何注册和监听它们。正如@JAAulde上面提到的那样,每个浏览器处理这个问题的方式可能不同,但我认为浏览器不会针对事件监听器是否存在进行优化,至少不会有什么重大变化。

谢谢@aug!这正是我在寻找的。即使浏览器工作方式不同,总有一个“应该是这样”的条款,你刚刚找到了它。 - pgarciacamou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接