看源码时候做的笔记-----------
1.targetMap 为什么是 weakMap,WeakMap 和 Map有什么区别?
Map 是由 key 数组和 value 数组构成,遍历时,先遍历 key, 找到 index , 然后再从 value 数组取值。两个很大的缺点:
a) 赋值和搜索操作都是 O(n) 的时间复杂度( n 是键值对的个数),因为这两个操作都需要遍历全部整个数组来进行匹配。
b) 是可能会导致内存泄漏,因为数组会一直引用着每个键和值。这种引用使得垃圾回收算法不能回收处理他们,即使没有其他任何引用存在了。
WeakMap
对象是一组键/值对的集合,其中的键是弱引用的,因为是弱引用,所以key不可被枚举,如果key 是可枚举的话,其列表将会受垃圾回收机制的影响,从而得到不确定的结果。其键必须是对象,而值可以是任意的。
a) WeakMap 持有的是每个键对象的“弱引用”,而弱引用的对象,垃圾回收机制不考虑对该对象的引用,这意味着在没有其他引用存在时垃圾回收能正确进行。
原生 WeakMap 的结构是特殊且有效的,其用于映射的 key 只有在其没有被回收时才是有效的。
effec.ts 中,Dep是个set,KeyToDepMap 是个 Map,targetMap 是个WeakMap。
2.Reflect 和 Object 有什么区别?