vue.js 响应式系统使用 weakmap 实现对象级依赖收集,因其弱引用特性可避免内存泄漏;外层 weakmap 以响应式对象为键、map 为值,记录各属性对应的副作用函数集合;依赖在 proxy 的 get 拦截器中自动收集。

Vue.js 的响应式系统依赖 WeakMap 实现高效、自动的依赖收集,核心在于它能以对象为键、安全地建立“对象 → 依赖关系”的映射,同时避免内存泄漏。
WeakMap 是什么?为什么 Vue 选它而不是普通 Map?
WeakMap 是 JavaScript 内置的集合类型,只接受对象(Object、Array、Map 等)作为键,且对键是弱引用——即不阻止垃圾回收机制释放该对象。这恰好契合响应式场景:
- 响应式对象(如
data中的普通对象)天然适合作为 WeakMap 的键; - 当组件卸载、响应式对象不再被任何地方引用时,WeakMap 中对应的条目会自动失效,无需手动清理;
- 若用普通
Map,键对象长期持有引用,容易造成内存泄漏。
WeakMap 在依赖收集中的实际结构
Vue 3 的响应式系统(基于 Proxy)内部使用一个全局的 targetMap: WeakMap<any map symbol set>>></any>:
vue-composition-api-best-practices
Vue 3 组合式 API 与
热门下载
相关下载
精品课程
相关推荐
/
热门推荐
/
最新课程
最新文章
