如果我在 javascript 中有两个 WeakMap:
/**
* @type {WeakMap.<Function, Provider>}
*/
const providerFtn = new WeakMap();
/**
* @type {WeakMap.<Provider, Function>}
*/
const provider = new WeakMap();
我在 WeakMaps 中放置了一个 Provider 及其功能...
function registerThingProvider(title, params) {
const myProvider = new Provider(title);
function factory() { new Thing(params); }
providerFtn.set(factory, myProvider);
provider.set(myProvider, factory);
return myProvider;
}
let stronglyReachableProvider = registerThingProvider('fooBar', [ 3.14, null ]);
在这一点上,我希望提供者和它的功能都是强可达的。我的假设是,一个强可达的键会使它自己和它的值都不能用于垃圾回收。providerFtn
和中的引用provider
应该是安全的。
但是,如果我与我的提供者一起做了一堆重要的工作,然后清除我唯一的强stronglyReachableProvider
参考......
await importantWork(stronglyReachableProvider);
stronglyReachableProvider = null;
假设没有对 WeakMaps 之外的对象的其他强引用。现在是否有myProvider
资格factory
进行垃圾收集?在这种情况下,如果 WeakMaps 中的值引用被认为是弱可达的,那就太好了,但我怀疑 WeakMap 值必然需要作为强引用来实现。