在实际业务场景中 WeakMap的使用场景并不多,他更多是在我们阅读框架当中的时候会碰到。
WeakMap从名称上来看 Weak-弱 有弱就会有强
1.强引用和弱引用的区别 直接使用代码更加直观
- 强引用
let key=new Object({});
key=null; //当我们设置成null的时候引用就会被GC回收
但是还是会有这种情况下
let key=new Array(['1']);
let map=new Map();
map.set(key,1);
key=null; 这种情况下GC不会回收代码,因为虽然key释放了引用,但是map还是对key有着强引用
所以key引用的Array对象不会被释放掉,就会造成内存泄漏
- 弱引用
上述的代码中
let key=new Array(['1']);
let map=new WeakMap();
map.set(key,1);
key=null; 这种情况下如果使用WeakMap就会解决掉上述的问题,GC会认为他已经是可以回收的
总结这个弱引用的特性,就是 WeakMaps 保持了对键名所引用的对象的弱引用,即垃圾回收机制不将该引用考虑在内。只要所引用的对象的其他引用都被清除,垃圾回收机制就会释放该对象所占用的内存。也就是说,一旦不再需要,WeakMap 里面的键名对象和所对应的键值对会自动消失,不用手动删除引用。