闭包
什么是闭包?
局部变量在函数执行完之后应该被销毁的,但是js中内部函数在执行之前被外部函数返回,仍然可以使用外部函数的变量。
闭包随着函数的创建而被同时创建

makeAdder是一个函数工厂,创建了将指定的值和参数相加求和的函数,使用函数工厂创建了两个函数,一个将其参数和5求和,另一个和10求和
共享相同的函数定义,保存不同的词法环境。add5和add10都是闭包
有什么用途?
- 模拟私有方法
![image]()
创建一个词法环境,为三个函数所共享,该环境含有两个私有项:privateCounter和changeBy,这两项无法在匿名函数外部直接访问,必须通过匿名函数返回的三个公共函数访问
![image]()
Counter1和Counter各自独立,每个闭包都是引用自己词法作用域内的变量privateCounter - 回调 柯里化 防抖 节流
引起的问题
引入let关键字之前,循环创建闭包,导致内存泄漏
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures


浙公网安备 33010602011771号