javascript - 我可以认为 JavaScript 的 WeakMap 中的值是弱可达的吗?
问题描述
如果我在 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 值必然需要作为强引用来实现。
解决方案
推荐阅读
- ruby-on-rails - 如何使用 docker(ruby on rails)设置 anycable?
- python - numpy - 如何组合多个索引(将多个一对一矩阵访问替换为一次访问)
- javascript - 如何使用 CSS 或 Javascript 为您的网站添加平滑滚动?
- npm - npm - 将命令行参数传递给脚本的尾部/结尾以外的不同部分
- windows - 为什么scrapy不会加载我的任何管道?
- html - srcset : 搞不好
- nvm - Dem_NvmBlockID 配置
- angular - Angular9 使用 HttpClient 通过表单数据将数据发布到 API
- font-awesome - FontAwesome SVG + JS 在 Select2 上存在伪元素性能问题
- ionic-framework - 离子+反应。侧边菜单和选项卡一起只有默认选项卡正在工作其余两个选项卡变为空白