我正在学习weakMaps、weakSets和weakRefs的用例。
我偶然发现一个代码是这样写的:
{
const x = {
a: [1, 2]
};
var weakMap = new WeakMap();
weakMap.set(x, 'something');
}
console.log(weakMap);
注意:运行代码片段后,请查看控制台。
大多数情况下,当我运行这段代码时,我会在weakMap中获取键x。
但是有几次,当我使用相同的代码时,我在weakMap中得到了注意。背后的原因是什么?
我在看这个视频来学习。
WeakMap中包含上述JS代码的数据(Codepen)。

对于上面的JS代码,没有数据的WeakMap (JSFiddle,我只能在JSFiddle中复制一次)。

垃圾收集不可预测吗?我想知道你是否在实际编码中使用过weakSet、weakMap或WeakRef .你是在什么情况下使用的?
发布于 2021-04-06 00:31:20
与单击控制台中的WeakMap项展开垃圾收集器时相比,差异将取决于垃圾收集器何时运行。请仔细注意那里的警告:

控制台显示的存在于WeakMap中的项目是在单击时出现的--而不是在console.log行运行时。
如果垃圾收集器在单击之前运行,则x对象将是GC'd,WeakMap将显示为空。
如果垃圾收集器在单击之前没有运行,则x对象将不会是GC对象,并且WeakMap将显示为填充。
垃圾收集不可预测吗?
总的来说,是的。最好不要依赖它。
https://stackoverflow.com/questions/66961318
复制相似问题