闭包通过私有变量管理依赖关系,如用WeakMap缓存对象映射实现深克隆,或封装监听器工厂绑定响应目标,亦可结合构造器隐藏依赖图,确保状态隔离与灵活扩展。

闭包本身不直接“存储依赖关系”,而是提供一种机制,让函数能持续持有对外部变量的引用——这个特性恰好适合用来管理、缓存或追踪对象之间的关联状态。
用闭包封装依赖映射表
当多个对象存在嵌套、循环或动态变化的依赖时,把依赖关系存进闭包内的私有变量(比如 Map 或 WeakMap),可避免污染全局、防止误改,也便于统一维护。
- WeakMap 特别适合存对象到对象的映射,键是原始对象,值是它的依赖项或克隆体,且不影响垃圾回收
- 闭包确保这个 Map 不被外部访问或重置,递归处理中每次调用都能读写同一份状态
- 例如深克隆含循环引用的对象时,就靠闭包包裹的 WeakMap 记录 “原对象 → 克隆体” 映射,遇到重复引用直接返回已有结果
通过闭包生成带上下文的处理器
依赖关系常体现在行为上:某个对象更新后,要触发另一些对象的响应。闭包可以预先绑定这些响应目标,形成“自带依赖链”的函数。
- 比如创建一个监听器工厂:createWatcher(target, deps),内部返回的回调函数通过闭包记住 target 和 deps 数组,无需每次传参
- deps 可以是对象、方法、甚至另一个闭包,实现灵活的依赖注入
- 这种写法天然支持一对多、多对一、条件依赖等复杂模式
闭包 + 构造器模拟私有依赖图
在类或模块初始化阶段,用闭包捕获初始依赖,并将操作逻辑封装为方法,就能构造出“外部不可见但内部连通”的依赖网络。
- 例如:const createService = (config) => { const cache = new Map(); return { load(key) { /*用cache和config协同工作*/ } }; }
- config 和 cache 都不会暴露出去,但所有返回的方法都能稳定访问它们
- 后续新增依赖只需扩展闭包内变量,不破坏已有接口

















