首先,这个问题背后我真正想要的是知道是否可以在 Javascript 中实现可靠的 SoftMap。
Babel 或Memoizee库似乎为 ES6 WeakMap/Set 提供了 polyfill。我试图阅读代码,但我不确定它是如何工作的。
来自Java背景,了解什么是WeakMap(WeakHashMap由来已久,甚至Weak/Soft/Phantom也有很长一段时间的引用)。
问题是,在 Java 中,为了实现 WeakHashMap,我们使用 JVM 提供的低级原语,如WeakReference。
我真的不明白如何WeakMap
在没有低级引用原语的情况下创建 polyfill。
有人可以向我解释一下,在我们想要填充的旧浏览器中,如果地图外的某些对象引用该键,如何跟踪地图键?
还有一点不清楚。在 Java 中,我们有软引用和弱引用,而在 Javascript 中只有弱映射/集。在阅读了一些关于 WeakMap 的 内容后,我仍然不清楚 GC 将如何决定收集地图条目。如果密钥变得不可访问,GC:
- 将始终立即收集条目
- CAN总是立即收集条目(但如果现在不需要内存,可以稍后再收集)
这就是 Java 中 Weak 和 Soft 的区别,不清楚 ES6 应该实现什么行为。