是否可以在 JavaScript 中创建“弱引用”?

新手上路,请多包涵
阅读 639
2 个回答

更新:自 2020 年 7 月以来,一些实现(Chrome、Edge、Firefox 和 Node.js)支持 WeakRef WeakRefs 提案 中定义的 s,该提案是截至 12 月 16 日的“第三阶段草案” , 2020.

JavaScript 中没有对 weakrefs 的语言支持。您可以使用手动引用计数自行滚动,但不是特别顺利。您不能制作代理包装器对象,因为在 JavaScript 中,对象永远不知道它们何时将被垃圾收集。

因此,您的“弱引用”成为简单查找中的键(例如整数),使用添加引用和删除引用方法,当不再有手动跟踪的引用时,可以删除条目,留下未来的查找该键返回空值。

这并不是真正的 weakref,但它可以解决一些相同的问题。它通常在复杂的 Web 应用程序中完成,以防止在 DOM 节点或事件处理程序与与之关联的对象(例如闭包)之间存在引用循环时浏览器(通常是 IE,尤其是旧版本)的内存泄漏。在这些情况下,甚至可能不需要完整的引用计数方案。

原文由 bobince 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题