06 闭包 closure

闭包:一个函数,把外部变量包进来了 作用域:一个变量能在哪些地方被看到、被使用。函数内部的变量,只在这个函数作用域里有效。函数执行完,里面的局部变量通常就没用了。

常见的几个用途: 1)保存状态:比如计数器、表单步骤、缓存值。 2)做私有变量:不想让外部乱改,只允许通过函数操作。 3)工厂函数:你先给一个配置,生成一个带这个配置的函数。

闭包是什么? - 闭包就是一个函数,它可以记住并访问它定义时所在的外部变量,即使这个函数在外部执行,这些变量依然不会消失。 有哪些应用场景? - 第一个是保存状态,比如计数器。你可以用闭包让一个变量一直存在,每次调用函数都基于上一次的结果继续算。 - 第二个是实现私有变量,比如在一个函数里定义一个变量,外部不能直接访问,只能通过你暴露的方法去操作,这在模块设计里很常见。 - 第三个是工厂函数,也就是你传入不同参数,返回不同“配置”的函数,本质上是函数记住了当时的参数。 - 还有就是在事件处理或者回调里,闭包可以帮你记住当时的一些数据,比如按钮的 id 之类的。 可能产生什么问题? - 内存问题:因为闭包会让变量一直被引用,不会被垃圾回收。如果不注意,可能会导致内存占用增加。 - 容易出 bug:比如在 for 循环里配合 var 使用时,所有闭包可能共享同一个变量,导致结果不符合预期,这是一个经典坑。 - 代码可读性:如果闭包嵌套太多,变量来源会变得不清晰,调试起来会比较困难。