首页 / JavaScript
闭包到底解决什么问题:三个真实使用场景
2026年10月25日
闭包的定义很好背,但很多人说不清它到底解决了什么问题。下面三个场景比定义更有说服力。
场景一:让变量活过函数执行
普通函数执行完,内部变量就释放了。如果希望某个状态在多次调用间保留,就需要把它包在一个不会结束的作用域里。计数器、开关、缓存都是这个模式。
场景二:避免循环里的变量共享
在 var 时代,循环里绑事件会出现所有回调拿到同一个变量的问题。用立即执行函数给每轮创建独立作用域,或者直接用 let 声明。理解这一点,才能明白为什么 let 改变了这段代码的行为。
场景三:模块化与私有属性
在 ES Module 普及前,闭包是实现私有变量的主要手段。把一个对象暴露在外面,把数据藏在内部,外部只能通过方法访问。这就是很多老库的写法。
代价
闭包会让变量不被回收,用错会导致内存占用持续上升。判断标准很简单:这个状态是否需要跨调用保留。不需要,就不要闭包。
需要进一步沟通?电话 15375392549,或通过联系我们提交需求。