像我使用的许多其他人一样:
document.addEventListener('DOMContentLoaded',domLoadedFunc,!1);
结合 window.onload 来处理应该在 DOM 加载和解析后立即触发的事件。
我想知道是否有理由在 DOMContentLoaded 监听器触发后显式删除它。
类似的东西(在我们的 domLoadedFunc 中):
if(document.removeEventListener){
document.removeEventListener('DOMContentLoaded',domLoadedFunc,!1);
}
是否有理由在 DOMContentLoaded 监听器触发后将其移除?
最佳答案
事件一旦触发,就不会再触发。因此,如果您在代码第一次触发后将其删除或不删除,您的代码不会有任何不同的结果。
从技术上讲,如果你有很多事件处理程序都附加到文档对象,删除不再需要的事件处理程序可能会稍微快一些,但这与你编写和执行的额外代码相平衡将其删除。
就个人而言,我按照以下优先顺序编写代码:正确性、可靠性、可读性、可维护性、简单性和性能,并且只在实际需要时才做任何纯粹为了性能的事情。因此,按照该层次结构,我不会删除事件处理程序,因为前四个优先级中的任何一个都不需要这样做,无助于简化代码,也不是重要的性能问题。
我看到像这样删除事件处理程序的一个原因是,如果您正在监视多个不同的事件,并且一旦第一个事件被触发,您希望确保您不响应任何其他事件您也在监视的事件。如果您随后删除了其他处理程序,那么您就不必保留一个单独的标志来跟踪您已经完成工作的事实(例如,如果您正在监听两个 DOMContentLoaded
和 window.onload
并且只想响应先发生的那个。
仅供引用,如果您对 jQuery 的 $(document).ready()
的普通 javascript 版本感兴趣,它适用于所有浏览器(使用 DOMContentLoaded
可用时,如果不是,则退回到其他方式),听起来您可能正在处理,这里有一个名为 docReady()
的函数的简单易用的实现:pure JavaScript equivalent to jQuery's $.ready() how to call a function when the page/dom is ready for it您可以使用或从中复制/学习概念。
关于javascript - 是否有理由在事件处理后移除 EventListener DOMContentLoaded?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23093084/