javascript - 是否有理由在事件处理后移除 EventListener DOMContentLoaded?

标签 javascript events dom listener

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

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

结合 window.onload 来处理应该在 DOM 加载和解析后立即触发的事件。

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

类似的东西(在我们的 domLoadedFunc 中):

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

是否有理由在 DOMContentLoaded 监听器触发后将其移除?

最佳答案

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

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

就个人而言,我按照以下优先顺序编写代码:正确性、可靠性、可读性、可维护性、简单性和性能,并且只在实际需要时才做任何纯粹为了性能的事情。因此,按照该层次结构,我不会删除事件处理程序,因为前四个优先级中的任何一个都不需要这样做,无助于简化代码,也不是重要的性能问题。


我看到像这样删除事件处理程序的一个原因是,如果您正在监视多个不同的事件,并且一旦第一个事件被触发,您希望确保您不响应任何其他事件您也在监视的事件。如果您随后删除了其他处理程序,那么您就不必保留一个单独的标志来跟踪您已经完成工作的事实(例如,如果您正在监听两个 DOMContentLoadedwindow.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/

相关文章:

javascript - 仅使用 javascript 添加 onclick 事件

vb.net - Visual Studio 2012启动时崩溃

javascript - 在 MooTools 中的另一个 DOM 元素中添加元素

javascript - 如何使用 jQuery 检索多个 anchor URL?

javascript - 如何使用 css 和 javascript 创建看起来自然的线条?

javascript - 在 TypeScript 中定义方法的不同方式

javascript - 解构对象数组以获取嵌套值 ES6

javascript - 是否可以在另一个请求中有一个 Angular js $http 请求?

javascript - 在图像的特定部分触发事件

c# - 如何在 C# 中调度事件