如果没有监听器,JavaScript中的事件是否总是会被触发?
例如,“mousemove”事件,即使整个应用程序中没有监听器,我移动鼠标,浏览器是否仍会构建新的事件并触发它,或者会进行优化,只考虑没有事件监听器的情况下忽略数据。
我假设每个浏览器的工作方式都不同,并且我假设它们使用像观察者等模式,但是是否有规范说明应该如何处理呢?
如果没有监听器,JavaScript中的事件是否总是会被触发?
例如,“mousemove”事件,即使整个应用程序中没有监听器,我移动鼠标,浏览器是否仍会构建新的事件并触发它,或者会进行优化,只考虑没有事件监听器的情况下忽略数据。
我假设每个浏览器的工作方式都不同,并且我假设它们使用像观察者等模式,但是是否有规范说明应该如何处理呢?
如果您认为不正确,请随意给此内容投反对票,但根据我的理解和DOM Level 2 Events Spec的规定,事件总是会被构建和执行,但需要有监听器来实际注册它们。
我之所以说“有一种感觉事件总是被构建和执行”是因为该规范提到:
如果事件监听器是动态添加的,页面需要知道如何注册和监听它们。正如@JAAulde上面提到的那样,每个浏览器处理这个问题的方式可能不同,但我认为浏览器不会针对事件监听器是否存在进行优化,至少不会有什么重大变化。此方法允许在事件目标上注册事件侦听器。如果在EventTarget处理事件时向其添加EventListener,则当前操作不会触发它,但可能会在事件流的后续阶段(如冒泡阶段)触发。 如果使用相同参数在同一EventTarget上注册多个相同的EventListener,则会丢弃重复的实例。 它们不会导致EventListener被调用两次,并且由于它们被丢弃,因此无需使用removeEventListener方法将它们删除。