繁体   English   中英

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

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

我正在尝试使用对等 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;
 }

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

...当对象在 Javascript 中设置为 null 时?

对象不能在 JavaScript 中设置为null ,但引用这些对象的变量或属性可以。 如果该变量/属性是唯一引用该对象的变量/属性,则该对象有资格进行垃圾回收。 因此,虽然事件侦听器本身不会被删除,但在正常情况下,对象消失了,这并不重要(如果对象是唯一引用这些事件侦听器的对象,那么它们也有资格获得垃圾收集)。

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

当然,要绝对确定,请主动删除侦听器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM