问题描述
如果我在 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;
假设没有其他对 WeakMap 之外的对象的强引用。 myProvider
和 factory
现在是否符合垃圾收集条件?如果 WeakMap 中的值引用在这种情况下被认为是弱可达的,那就太好了,但我怀疑 WeakMap 值必然需要实现为强引用。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)