闭包是指一个内部函数能够访问其外部函数作用域中的变量、函数,即使外部函数已经执行完毕并被销毁。其本质是:JavaScript 词法作用域(静态作用域)的延伸,以及函数执行上下文栈与变量对象的持久化保存
(1)核心价值
实现变量私有化(模块化开发的基石,如 Vue 2 中的组件内部状态管理);
实现变量持久化(如计数器、缓存工具,避免频繁创建 / 销毁变量);
实现柯里化、高阶组件等高级编程技巧,提升代码复用性与可读性。
(2)潜在风险与解决方案
风险:内存泄漏—— 闭包会持久化保存外部函数的变量对象,若闭包被长期引用且未手动释放,会导致变量无法被垃圾回收(GC),占用内存。
解决方案:
当闭包不再使用时,手动将其赋值为 null,切断引用链,让垃圾回收机制回收内存;
避免在闭包中引用过大的对象 / 大量数据,减少内存占用;
合理设计闭包粒度,避免不必要的嵌套闭包

