# 闭包

闭包是这样一种机制: 函数嵌套函数, 内部函数可以引用外部函数的参数和变量,参数和变量不会被垃圾回收机制所收回.

这里涉及到几个概念:

  • 函数嵌套函数
  • 作用域(全局变量和局部变量)
    变量的访问规则
  • 垃圾回收机制(garbage collection)
    js内部不断扫描内存,并清理无引用对象(自动完成);
    function aa(){
      var num=10;
      function bb(){
        num++
        console.log(num);
      }
      return bb;
    }
    //bb(); //无法直接访问函数内部的函数
    
    aa()();//11
    aa()();//11
    aa()();//11
    
    var closure = aa();
    closure();//11
    closure();//12
    closure();//13
    

# 闭包的好处

  • 可以让一个变量长期驻扎在内存当中不被释放
  • 避免全局变量的污染, 和全局变量不同, 闭包中的变量无法被外部使用
  • 私有成员的存在, 无法被外部调用, 只可以自己内部使用

结论:

  • 闭包是指有权访问另一函数作用域中的变量的函数
  • 闭包,可以访问函数内部的局部变量,并让其长期驻留内存
  • 由于闭包会携带包含它的作用域(运行环境),因此会比其他函数占用更多内存,过度使用闭包可能会造成性能问题。

[练习]

  • 点击按钮打印当前索引值
  • tab标签切换

上次更新: 2020-3-16 08:17:11