【问题标题】:Are event listeners removed when object is set to null in Javascript?在 Javascript 中将对象设置为 null 时是否会删除事件侦听器?
【发布时间】:2021-06-30 10:30:17
【问题描述】:

我正在尝试使用对等 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,连接的事件监听器也会被删除吗?

【问题讨论】:

  • 我很好奇,为什么不试试this.peer.off()
  • 只是有点懒??

标签: javascript node.js webrtc peerjs


【解决方案1】:

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

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

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

为了绝对肯定,当然,主动移除监听器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多