闭包

什么是闭包?

局部变量在函数执行完之后应该被销毁的,但是js中内部函数在执行之前被外部函数返回,仍然可以使用外部函数的变量。
闭包随着函数的创建而被同时创建
image
makeAdder是一个函数工厂,创建了将指定的值和参数相加求和的函数,使用函数工厂创建了两个函数,一个将其参数和5求和,另一个和10求和
共享相同的函数定义,保存不同的词法环境。add5和add10都是闭包

有什么用途?

  • 模拟私有方法
    image
    创建一个词法环境,为三个函数所共享,该环境含有两个私有项:privateCounter和changeBy,这两项无法在匿名函数外部直接访问,必须通过匿名函数返回的三个公共函数访问
    image
    Counter1和Counter各自独立,每个闭包都是引用自己词法作用域内的变量privateCounter
  • 回调 柯里化 防抖 节流

引起的问题

引入let关键字之前,循环创建闭包,导致内存泄漏

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures

posted @ 2023-10-25 15:46  躺尸的大笨鸟  阅读(30)  评论(0)    收藏  举报