闭包实现懒执行:外层函数配置参数并返回内层函数,内层函数访问外层变量形成闭包,调用时才计算;可结合缓存、条件判断(如predicate)优化性能,但需防范引用滞留导致的内存问题。

闭包可以保存函数创建时的环境状态,让函数体延迟到真正调用时才执行,从而实现“懒执行”——即不提前计算、不浪费资源,只在需要结果时才触发逻辑。
用闭包包裹计算逻辑,返回可调用函数
把耗时或依赖外部状态的计算过程封装进内层函数,外层函数接收参数并返回这个内层函数。此时计算并未发生,只是准备好了执行上下文。
- 外层函数负责“配置”,比如传入初始值、条件或数据源
- 内层函数负责“执行”,它能访问外层作用域变量,形成闭包
- 返回的是函数本身,不是执行结果,调用时才真正运算
典型场景:带缓存的懒求值
比如一个需多次调用但结果不变的复杂计算,可用闭包+局部变量缓存结果,首次调用计算并存储,后续直接返回缓存值。
- 闭包内部用 let result 存储是否已计算及结果值
- 返回的函数检查 result !== undefined,是则直接返回,否则执行并赋值
- 避免重复开销,又保持接口简洁(调用方式和普通函数一样)
配合高阶函数实现条件懒执行
把“是否执行”的判断权交给用户,比如传入一个 predicate 函数,闭包在每次调用前先运行 predicate,为 true 才执行主体逻辑。
- 适合用于日志、调试、权限校验等“可能跳过”的操作
- predicate 可读取当前状态(如用户登录态、配置开关),闭包使其自然捕获
- 主体函数不立即执行,也不暴露中间状态,语义清晰
注意点:避免意外的引用滞留
闭包会持续持有外层变量的引用,若外层包含大对象或 DOM 节点,且懒函数长期不被释放,可能引发内存占用问题。
- 及时清理不再需要的闭包引用(如设为 null)
- 避免在闭包中无意捕获全局或长生命周期对象
- 必要时用 WeakMap 管理关联数据,降低强引用风险











