最近我发现自己不断在任何地方编写removeEventListeners,这使得代码非常混乱.我知道这是一种最佳实践,但总的来说它没有任何意义.垃圾收集器应该自己处理这么简单的任务,不应该吗?当对象设置为null时,是否很难自动删除所有侦听器?
所以我只想确定是否是这种情况.将对象设置为null,会自动删除所有附加的事件侦听器吗?
对此有何见解?
更新:在我的情况下场景是这样的 - 我创建一个对象并附加一堆事件监听器,然后一段时间后我需要重新初始化这个对象.当然,将此对象设置为null要比手动取消绑定每个侦听器容易得多.在大多数情况下,监听器是匿名函数,这意味着没有代码重构就不可能.当我只是用new重新初始化变量时,我没有得到重复的监听器等等,但我不确定它是以前的值,以及所有的监听器都被垃圾收集.是吗?
不,您不是将对象设置为 null,而是将引用它的指针设置为 null。除非程序的任何其他部分(包括侦听器)不需要它,否则垃圾收集不会拾取它。您需要自己删除所有侦听器,但这不应阻止您找到一种不太混乱的方法来完成此操作 - 例如专用的clearListeners方法或辅助类等。