gpt4 book ai didi

javascript - 如何在javascript中模拟垃圾收集?

转载 作者:行者123 更新时间:2023-12-03 02:08:16 26 4
gpt4 key购买 nike

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

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 数组以外的任何东西使用的对象。

这可能吗?

最佳答案

将对象存储在集合中以便它们仍然被垃圾回收的唯一方法是 WeakMap。但是您无法迭代它们:

Because of references being weak, WeakMap keys are not enumerable (i.e. there is no method giving you a list of the keys). If they were, the list would depend on the state of garbage collection, introducing non-determinism. ~ MDN

所以不,这在 js 中是不可能的,有充分的理由。

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com