假设我有一个保存对象数组的库,目的与问题无关。它看起来像这样:
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/