如果我不移除removeEventListener (JavaScript),会发生什么?

3

我正在添加一些事件监听器来检查它是否是触摸设备。所以我希望这些事件监听器一直存在,直到页面重新加载。

我应该仍然删除事件监听器(removeEventListener('touchstart', myFunction))吗?如果是的话,为什么要这样做?

这是在VueJS应用程序的根实例中。我正在created部分中添加事件监听器。


2
如果页面真的重新加载了,那么它们无论如何都会消失。 - Pointy
如果你只是用它们来这样,删除它们将防止你的函数在每次页面查看时不必要地执行。 - ceejayoz
@Pointy 我觉得OP的意思是他们希望在单页应用程序开始时执行一次。 - ceejayoz
@ceejayoz 可能是对的,但问题中并没有提到“SPA”这个术语。 - Pointy
1
@Pointy 大多数Vue应用程序都是单页应用(SPA)。 - ceejayoz
好的,这是公平的。 - Pointy
1个回答

5

你应该在销毁添加事件监听器的组件之前移除它们的主要原因是,一旦你的组件消失了,当事件发生时应该执行的函数也会消失(在大多数情况下)。因此,如果你绑定了监听器的元素比组件存在时间更长,当事件发生时你将会得到一个错误,因为要执行的代码找不到了。

虽然这通常是一个边缘案例,但它往往会产生特别难以调试的错误。

此外,在单页面应用程序中(这是Vue应用程序最常见的用法),不移除监听器可能会迅速成为性能问题。


重要提示:只有您通过DOM操作添加的事件(例如:el.addEventListener())需要被移除。Vue会自动清理自己创建的事件(例如:@click@my-custom-event等)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接