通常,当对象、数组这类数据结构在内存中时,它们的子元素,如对象的属性、数组的元素都是可以访问的。例如,如果把一个对象放入到数组中,那么只要这个数组存在,那么这个对象也就存在,即使没有其他对该对象的引用。
let john = { name: "John" };
let array = [ john ];
john = null;
// 覆盖引用 // 前面由 john 所引用的那个对象被存储在了 array 中 // 所以它不会被垃圾回收机制回收
WeakMap
WeakMap
和 Map
的第一个不同点就是,WeakMap
的键必须是对象,不能是原始值: