搭错车的小火柴

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

看源码时候做的笔记-----------

 

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 有什么区别?

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/Comparing_Reflect_and_Object_methods

posted on 2020-07-02 16:39  搭错车的小火柴  阅读(219)  评论(0编辑  收藏