簡體   English   中英

如何模仿JavaScript中的垃圾回收?

[英]How to imitate garbage collection in javascript?

假設我有一個保存對象數組的庫,目的與問題無關。 它看起來像這樣:

window.Tracker = {
  objects: [],
  track: function(obj){
    this.objects.push(obj)
  }
}

在應用程序的其他部分,Vue / React組件在從服務器加載對象時不斷將對象推入該庫:

this.movie = { id: 56456, name: "Avengers" }
Tracker.track(this.props.movie)

加時賽中, Tracker.objects陣列變得越來越大,主要是因為不再需要(其成分不復存在)對象,我真的不想讓物體像這樣在數組中。

問題是除了該Tracker庫之外,我無法控制其他任何東西。 (因此當不再需要該對象時,我無法真正進行回調)

但是,我需要一種方法來垃圾回收/擺脫除Tracker.objects數組之外的任何對象不再使用的對象。

這可能嗎?

將對象存儲在集合中以便仍然對其進行垃圾回收的唯一方法是WeakMaps。 但是,您不能對其進行迭代:

由於引用薄弱,因此WeakMap密鑰不可枚舉(即,沒有方法可以為您提供密鑰列表)。 如果是這樣,則該列表將取決於垃圾回收的狀態,從而引入不確定性。 〜MDN

所以不,出於充分的原因,這在js中是不可能的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM