You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中将对象赋值为null时,绑定的事件监听器会被一同移除吗?

问题结论

直接将Peer实例赋值为null不会主动移除绑定的事件监听器,该操作存在内存泄漏和异常触发风险,不建议替代官方destroy()方法使用。


具体原因

  • 赋值为null仅会清空你当前Demo类中peer属性对实例的引用,并不会直接销毁Peer实例本身
  • 只要Peer实例还被其他逻辑持有引用(比如未断开的内部信令WebSocket连接、活跃的WebRTC连接、浏览器异步队列中绑定的回调),实例就不会被JS垃圾回收机制清理,你绑定的open、close等事件监听器也会继续留存,甚至可能在你预期之外的时机被触发
  • 只有当Peer实例的所有外部引用都被清空、实例被垃圾回收器回收时,绑定的事件监听器才会跟着被销毁,但垃圾回收时机完全不可控,不能作为事件监听器移除的可靠方案

正确实现

Peer实例提供的destroy()方法会主动完成全量资源清理:主动关闭所有活跃的DataConnection、MediaConnection连接,移除所有绑定的事件监听器,断开内部信令连接,清理所有内部持有的引用。

你可以将closePeerConnection方法调整为以下安全实现:

closePeerConnection() {
  if (this.peer) {
    // 先调用官方销毁方法清理所有资源和事件监听
    this.peer.destroy()
    // 再清空引用
    this.peer = null
  }
}

内容的提问来源于stack exchange,提问作者dev404

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 16:54:03