• 关于闭包的理解


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

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

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

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

  • 相关阅读:
    BZOJ 2654: tree(二分 最小生成树)
    洛谷P4602 [CTSC2018]混合果汁(主席树)
    SDOI 2018 round2游记
    Codeforces Round #479 (Div. 3) 题解
    软件开发中关于向后兼容的理解
    使用achartengine实现自定义折线图 ----附代码 调试OK
    python每次处理一个字符的三种方法
    子序列的个数 --- 庞果网
    IOS深入学习(4)之Coordinate System
    C# ADO基础 SqlHelper
  • 原文地址:https://www.cnblogs.com/czy960731/p/7570743.html
Copyright © 2020-2023  润新知