关于闭包的理解

js复习决定把闭包这个特性好好研究清楚

闭包是一种函数特性把,函数包含子函数,通过子函数访问自身变量,然后在讲子函数返回,达到普通函数做不到的特性

普通函数可以访问全局变量,但是不能访问其他函数的变量

  var n = 1;
  function f1(){
    alert(n);
    var b = 2;
  }
  f1();    //=> 1
  function f2(){
    alert(b);
  }
  f2();   // b is not defined

如果我们想访问其他函数中的值,我们可以用闭包

  function f(){
    var n = 1;
    function f1(){
      n = n + 1;
      return n;
     }
      return f1;
      }

    var f2 = f();     //把返回的函数值赋给f2
    alert(f2());    //=>2

我们也可以使用闭包来保存变量

上述代码,我们调用f2之后可以得到n的值,n的值没有随着f的调用之后消失

 闭包就是定义在函数中能访问其他函数局部变量的函数,所以本质上闭包就是将函数内部和外部连接起来的一座桥梁。

缓存:最显而易见的好处,就是可以实现数据缓存,我们可以把一个需要长期用到的变量设为闭包函数的局部变量,在子函数里面直接使用它。因此局部变量只定义初始化一次,但我们可以多次调用子函数并使用该变量。这比起我们在子函数中定义初始化变量,多次调用则多次初始化的做法,效率更高。

实现封装:如同前面所说,闭包函数就如同一个“类”,只有在该闭包函数里的方法才可以使用其局部变量,闭包函数之外的方法是不能读取其局部变量的。这就实现了面向对象的封装性,更安全更可靠。

原文地址:https://www.cnblogs.com/czy960731/p/7570743.html