首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WeakMap显示相同代码的不同结果

WeakMap显示相同代码的不同结果
EN

Stack Overflow用户
提问于 2021-04-06 00:28:04
回答 1查看 95关注 0票数 1

我正在学习weakMaps、weakSets和weakRefs的用例。

我偶然发现一个代码是这样写的:

代码语言:javascript
运行
复制
{
  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 .你是在什么情况下使用的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-06 00:31:20

与单击控制台中的WeakMap项展开垃圾收集器时相比,差异将取决于垃圾收集器何时运行。请仔细注意那里的警告:

控制台显示的存在于WeakMap中的项目是在单击时出现的--而不是在console.log行运行时。

如果垃圾收集器在单击之前运行,则x对象将是GC'd,WeakMap将显示为空。

如果垃圾收集器在单击之前没有运行,则x对象将不会是GC对象,并且WeakMap将显示为填充。

垃圾收集不可预测吗?

总的来说,是的。最好不要依赖它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66961318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档