Ste*_*gle 88 javascript weak-references
在javascript中是否有任何方法可以创建另一个对象的"弱引用"?这是描述弱引用的维基页面. 这是另一篇用Java描述它们的文章.谁能想到在javascript中实现这种行为的方法?
bob*_*nce 38
JavaScript中的weakrefs没有语言支持.您可以使用手动引用计数自行滚动,但不是特别顺利.您无法创建代理包装器对象,因为在JavaScript对象中永远不知道它们何时会被垃圾收集.
因此,您的"弱引用"在简单查找中成为一个键(例如整数),使用add-reference和remove-reference方法,并且当不再有手动跟踪引用时,可以删除条目,以便将来查找该键返回null.
这不是一个真正的弱点,但它可以解决一些相同的问题.它通常在复杂的Web应用程序中完成,以防止在DOM节点或事件处理程序与与之关联的对象(如闭包)之间存在引用循环时,浏览器(通常是IE,尤其是旧版本)的内存泄漏.在这些情况下,甚至可能不需要完整的参考计数方案.
M. *_*rog 13
目前还不可能使用弱引用,但很可能很快就会成为可能,因为JavaScript 中的WeakRefs正在开发中。详情如下。
现在处于第 3 阶段的提案,这意味着它具有完整的规范,进一步的改进将需要来自实现和用户的反馈。
该WeakRef提案涵盖的功能两大新作品:
一个主要用途为弱引用是实现高速缓存或映射举办大型的物体,在它的希望,因为它出现在高速缓存或映射一个大对象没有保持活着只。
终结是在程序执行无法访问的对象之后执行代码以进行清理。用户定义的终结器启用了几个新用例,并且可以在管理垃圾收集器不知道的资源时帮助防止内存泄漏。
https://github.com/tc39/proposal-weakrefs
https://v8.dev/features/weak-references
2021 年更新
WeakRef现已在 Chrome、Edge 和 Firefox 中实现。仍在等待 Safari 和其他一些坚持不懈的人。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakRef
2021 年 5 月更新 现在可在 Safari 以及所有主要浏览器上使用。往上看。