~M{H_LC5ZS%HCS%QH0R3{8H.png

L3ZQ8PE4{X3@RH5H)H8D`V9.png
2(2%~`PQ9FS}24Q0E]_X)BN.png

闭包的总结

闭包的应用场景 缓存中间变量

有一个函数A, 在函数 A内部返回一个函数B
  1. function funA(){
  2. var int = 100;
  3. return function funB(){
  4. var num = int;
  5. return num;
  6. }
  7. }

在函数B中访问函数A 的私有作用域变量

了解闭包

闭包的生成有三个必要条件(缺一不可)

  1. 1 . 在函数A内部直接或者间接返回一个函数B
  1. 2. B函数内部使用着A 函数的私有变量(私有数据)
  2. 3. A函数外部有一个变量收着函数B

从而形成了一个不会销毁的函数空间

闭包空间

  1. 我们不管这个不会销毁的a 函数的执行空间做叫做 闭包空间
  2. 把函数a 里面的返回的 函数b ,叫做函数a 的闭包函数
  3. 官方给的定义有一句话: 闭包 => 函数内部的函数

闭包的特点 (优缺点并存)

1.延长了变量的生命周期

  1. 优点: 因为执行空间不销毁,变量也没有销毁
  2. 缺点: 因为执行空间不销毁,会一直存在内存中
  1. 可以访问函数内部的私有变量
    优点: 利用闭包函数可以访问函数内部的私有变量
    缺点: 执行空间不销毁,会一直存在内存中
  2. 保护私有变量(只要是函数,就有个特点)
    优点: 保护私有变量不被外界访问
    缺点: 如果想访问,必须要利用闭包函数

闭包的函数的缺点: 致命的去缺点

  1. 因为当一段内存空间中有一个不会被销毁的东西存在
  2. 那么就会出现内存占用,如果过多,就会导致内存泄漏
  3. 那么结果就是 内存泄漏

闭包的作用

  1. 就是当你需要延长变量的生命周期
  2. 或者你需要访问某一个函数内部的私有数据的时候
  3. 你可以使用闭包 函数来解决

前提是:

  1. 如果有别的方法,尽量不要使用闭包函数
  2. 只有到没有招的时候,我们在使用闭包函数

闭包慎用!!!!