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

时间:2014-04-15 19:47:58

标签: javascript events dom listener

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

document.addEventListener('DOMContentLoaded',domLoadedFunc,!1);

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

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

(domLoadedFunc内部):

if(document.removeEventListener){
    document.removeEventListener('DOMContentLoaded',domLoadedFunc,!1);
}

有没有理由在它被触发后删除DOMContentLoaded侦听器?

1 个答案:

答案 0 :(得分:3)

一旦事件被触发,它将不会再次触发。因此,如果您的代码在第一次触发后将其删除,则不会有任何不同的结果。

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

就个人而言,我在这个优先顺序中编写思想代码:正确性,可靠性,可读性,可维护性,简单性和性能,并且只在实际需要时才为性能做任何事情。因此,遵循该层次结构,我不会删除事件处理程序,因为前四个优先级中的任何一个都不需要这样做,这不会有助于代码的简单性,也不会影响性能问题。


我看到删除这样的事件处理程序的一个原因是,如果您正在监视多个不同的事件,并且一旦触发了第一个事件,您希望确保不响应任何其他事件你正在监控的事件。如果您随后删除了其他处理程序,那么您不必保留单独的标记来跟踪您已经完成工作的事实(例如,如果您正在同时监听DOMContentLoaded和{ {1}}只是想回应最先发生的事情。


仅供参考,如果你对jQuery window.onload的普通javascript版本感兴趣,它可以在所有浏览器中使用(在可用时使用$(document).ready(),在没有时使用其他方法),这听起来像你可能正在使用,这里有一个很简单易用的函数DOMContentLoaded的实现:pure JavaScript equivalent to jQuery's $.ready() how to call a function when the page/dom is ready for it你可以使用或复制/学习概念。