在 Javascript 中将对象设置为 null 时是否删除了事件侦听器?

Are event listeners removed when object is set to null in Javascript?

我正在尝试使用 peer js 功能,我们在其中创建对等点并使用相应的事件侦听器,即当对等点创建、关闭、连接和其他内容时,我正在尝试在事件侦听器中使用它让它像服务一样工作。像这样:

class Demo extends EventEmitter {
 private peer: Peer | null = null;

 createPeerConnection() {
  this.peer = new Peer();

  this.peer.on('open', () => {
    // Some stuff done
    this.emit("Peer");
  });

  this.peer.on('close', () => {
    // Some more stuff done
    this.emit("Closed");
  });
 }

 closePeerConnection() {
  this.peer = null;
 }

我知道 peer 有 destroy 方法,但是如果出于某种原因我将对象设置为 null,连接的事件侦听器是否也会被删除?

...when object is set to null in Javascript?

对象 无法在 JavaScript 中设置 null,但可以设置引用这些对象的变量或属性。如果 variable/property 是唯一引用该对象的对象,则该对象符合垃圾回收条件。因此,虽然事件监听器本身不会被删除,但在正常情况下,对象会消失,这并不重要(如果对象是唯一引用这些事件监听器的东西,那么它们也有资格垃圾回收)。

有些事情可能会妨碍您对对象的其他引用,或者在某些情况下或某些环境中,如果事件侦听器具有对该对象的引用,则循环关系可以使它们保持一致(有a recent bug 在浏览器中围绕这个和 ResizeObserverIntersectionObserver)。但总的来说,它们都会消失(最终)。

当然要万无一失,主动移除监听器。