处理完事件后是否有理由删除EventListener DOMContentLoaded?

ano*_*one 6 javascript events dom listener

像我使用的许多其他人一样

document.addEventListener('DOMContentLoaded',domLoadedFunc,!1);
Run Code Online (Sandbox Code Playgroud)

与window.onload结合使用,可以处理在加载和解析DOM后立即触发的事件.

我想知道是否有理由在触发后显式删除DOMContentLoaded侦听器.

(我们的domLoadedFunc内部):

if(document.removeEventListener){
    document.removeEventListener('DOMContentLoaded',domLoadedFunc,!1);
}
Run Code Online (Sandbox Code Playgroud)

一旦它被触发,是否有理由删除DOMContentLoaded侦听器?

jfr*_*d00 5

事件一旦触发,便不会再次触发。因此,如果第一次将其删除,则将其删除将不会有任何不同的结果。

从技术上讲,如果您有很多事件处理程序都附加到文档对象上,那么删除不再需要的事件处理程序可能会稍微快一些,但这与您编写并执行以删除它的额外代码相平衡。

就我个人而言,我按照以下优先级顺序进行编码:正确性,可靠性,可读性,可维护性,简单性,然后是性能,并且仅在实际需要时才出于性能考虑而做任何事情。因此,按照该层次结构,我不会删除事件处理程序,因为前四个优先级中的任何一个都不需要这样做,这不会简化代码,也不是影响性能的问题。


我看到要删除此类事件处理程序的一个原因是,如果您要监视多个不同的事件,并且一旦触发了第一个事件,则要确保您不对其他任何事件做出响应重新监控。如果随后删除其他处理程序,则不必保留单独的标志来跟踪您已经完成工作的事实(例如,如果您正在听这两个DOMContentLoadedwindow.onload并且只想响应谁先发生。


仅供参考,如果您对$(document).ready()可以在所有浏览器中使用的jQuery普通javascript版本感兴趣(使用DOMContentLoaded时可用,在不使用时使用其他方式),听起来您可能正在使用,则有一个很好用的简单实现一个docReady()在这里调用的函数:纯JavaScript等效于jQuery的$ .ready()如何在页面/ dom准备就绪时调用该函数,您可以使用它或从中复制/学习概念。