Vue.js响应式系统底层数据结构WeakMap在依赖收集中的作用

阿芳同学_2417

阿芳同学_2417

2026-05-11

488人浏览

原创

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

vue.js响应式系统底层数据结构weakmap在依赖收集中的作用

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-composition-api-best-practices

Vue 3 组合式 API 与

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app快速上手
uni-app快速上手

共0课时 | 0人学习

Vue 教程
Vue 教程

共42课时 | 17.2万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 2.5万人学习