问题
为什么 Vue3 的响应式系统要使用 WeakMap?
背景
Vue3 的响应式系统底层使用了 WeakMap 来存储 target → reactivity map 的映射。了解这一设计选择的原因有助于深入理解 Vue3 的响应式原理。
现有答案
答案 1:避免内存泄漏
WeakMap 的键是弱引用的,当对象不再被其他地方引用时,可以被垃圾回收,从而避免内存泄漏。
答案 2:与对象生命周期绑定
响应式数据与原始对象生命周期绑定,当原始对象被回收时,响应式映射也应该被自动清理。
我的理解
Vue3 使用 WeakMap 是因为响应式映射不应该阻止原对象被回收,这与 Vue2 中使用闭包或普通 Map 可能导致的内存问题形成对比。
探索路径
- 阅读 Vue3 源码中 reactive.ts 的实现
- 对比 WeakMap 和 Map 在响应式场景下的行为差异 ✅ 2026-03-22
待验证
- WeakMap 在 Vue3 响应式中的具体作用机制