看源碼時候做的筆記-----------
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。