ECMAScript 6引入了弱映射,在Node.JS v0.11.3中可以使用–harmony标志.请考虑以下几点.
let weakMap = WeakMap(); let key = []; let rubbish = 'fish cans'; weakMap.set(key,rubbish); rubbish = 'empty bottle'; // Prints "fish cans" console.log(weakMap.get(key));
我的印象是,对于弱地图,从键到值的引用是弱的,所以如果唯一引用的值是键,那么该值就不能再被访问了.
为什么值“鱼罐头”仍然可以访问,而不是垃圾收集?可变垃圾不再引用它,从钥匙到“鱼罐”的引用是弱的,即从垃圾收集器的角度来看是不存在的.我失踪了什么
解决方法
弱点是关键,而不是值.从目前的草案:
WeakMap are intended to provide a mechanism for dynamically associating state with an object in a manner that does not “leak” memory resources if,in the absence of the WeakMap,the object otherwise became inaccessible and subject to resource reclamation by the implementation’s garbage collection mechanisms.
假设你有一个DOM元素,并希望将一些数据与它相关联,并使用WeakMap:weakMap.set(domElement,data);.当DOM元素被删除时,弱地图中的条目也被删除.
另一方面,您不需要在DOM元素存在的情况下删除数据,因为在弱映射之外没有其他引用.
除此之外,“鱼罐”是一种原始类型,因此不受垃圾收集的影响.