zoukankan      html  css  js  c++  java
  • 关于闭包的理解

    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的调用之后消失

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

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

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

  • 相关阅读:
    JavaScript中DOM的层次节点(一)
    JS可维护性代码
    Angular页面加载闪现解决方案 ng-cloak
    无法向会话状态服务器发出会话状态请求。
    算法题--拓扑排序
    2020年04月25日个人赛
    Educational Codeforces Round 86 (Rated for Div. 2)
    博弈--巴什博弈
    2020年04月19日个人赛
    AtCoder Beginner Contest 163(D)
  • 原文地址:https://www.cnblogs.com/czy960731/p/7570743.html
Copyright © 2011-2022 走看看