WeakMap 显示相同代码的不同结果
WeakMap showing different results for same code
我正在学习 weakMaps、weakSets 和 weakRefs 的用例。
我遇到了这样写的代码:
{
const x = {
a: [1, 2]
};
var weakMap = new WeakMap();
weakMap.set(x, 'something');
}
console.log(weakMap);
注意:请在 运行 代码段之后查看控制台。
大多数时候,当我 运行 这段代码时,我在 weakMap 中获取密钥 x。
但是有几次,当我使用相同的代码时,我在 weakMap 中注意到了。
背后的原因是什么?
我正在看这个video来学习。
包含上述 JS 代码 (Codepen) 数据的 WeakMap。
上面的 JS 代码没有数据的 WeakMap(JSFiddle,我只能在 JSFiddle 中重现一次)。
垃圾回收是不可预测的吗?
我想知道您是否在实际编码中使用过 weakSet、weakMap 或 WeakRef。你是在什么情况下使用的?
差异取决于垃圾收集器 运行 与您单击控制台中的 WeakMap 项以展开它的时间相比。请注意那里的警告:
控制台显示的存在于 WeakMap 中的项目是 在您单击 时就在其中的项目 - 而不是 console.log
行 运行.
如果在您单击之前垃圾收集器 运行,x
对象将被 GC,并且 WeakMap 将显示为空。
如果在您单击之前垃圾收集器没有运行,x
对象将不会被 GC,并且 WeakMap 会出现填充。
Is garbage collection unpredictable?
总的来说,是的。最好不要依赖它。
我正在学习 weakMaps、weakSets 和 weakRefs 的用例。
我遇到了这样写的代码:
{
const x = {
a: [1, 2]
};
var weakMap = new WeakMap();
weakMap.set(x, 'something');
}
console.log(weakMap);
注意:请在 运行 代码段之后查看控制台。
大多数时候,当我 运行 这段代码时,我在 weakMap 中获取密钥 x。
但是有几次,当我使用相同的代码时,我在 weakMap 中注意到了。 背后的原因是什么?
我正在看这个video来学习。
包含上述 JS 代码 (Codepen) 数据的 WeakMap。
上面的 JS 代码没有数据的 WeakMap(JSFiddle,我只能在 JSFiddle 中重现一次)。
垃圾回收是不可预测的吗? 我想知道您是否在实际编码中使用过 weakSet、weakMap 或 WeakRef。你是在什么情况下使用的?
差异取决于垃圾收集器 运行 与您单击控制台中的 WeakMap 项以展开它的时间相比。请注意那里的警告:
控制台显示的存在于 WeakMap 中的项目是 在您单击 时就在其中的项目 - 而不是 console.log
行 运行.
如果在您单击之前垃圾收集器 运行,x
对象将被 GC,并且 WeakMap 将显示为空。
如果在您单击之前垃圾收集器没有运行,x
对象将不会被 GC,并且 WeakMap 会出现填充。
Is garbage collection unpredictable?
总的来说,是的。最好不要依赖它。