簡體   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