假设我有一个保存对象数组的库,目的与问题无关。它看起来像这样:

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中是不可能的。

关于javascript - 如何模仿JavaScript中的垃圾回收?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49694553/

10-10 03:27