美文网首页
什么是闭包

什么是闭包

作者: 阿尔托莉鸭 | 来源:发表于2019-07-11 20:20 被阅读0次

    “函数”和“函数内部能访问到的变量(也叫环境)”的总和,就是一个闭包。

    JavaScript有两种作用域:全局作用域和函数作用域。函数内部可以直接读取全局变量。但是,在函数外部无法读取函数内部声明的变量。换言之,如果一个函数,使用了它范围外的变量,那么‘这个函数+这个变量’就叫做闭包。

    function f1() {
      var n = 1;
      function f2() {
        console.log(n);
      }
      return f2;
    } //这段代码中,函数 f2 和变量 n 的总和就叫做闭包
    
    

    闭包的用途:

    1.从外部读取函数内部的变量。

    function f1() {
      var n = 9;
      function f2() {
        console.log(n);
      }
      return f2;
    } 
    var result = f1();
    result(); // 9
    //这段代码中,函数f1的返回值就是函数f2,由于f2可以读取f1的内部变量,所以就可以在外部获得f1的内部变量了。
    

    2.让这些变量始终保持在内存中。

    function f1(n) {
      return function () {
        return n++;
      };
    }
    var a1 = f1(1);
    a1() // 1
    a1() // 2
    a1() // 3
    //这段代码中,闭包使得内部变量记住上一次调用时的运算结果。
    

    3.封装对象的私有属性和私有方法。

    function f1(n) {
      return function () {
        return n++;
      };
    }
    var a1 = f1(1);
    a1() // 1
    a1() // 2
    a1() // 3
    var a2 = f1(5);
    a2() // 5
    a2() // 6
    a2() // 7
    //这段代码中,a1 和 a2 是相互独立的,各自返回自己的私有变量。

    相关文章

      网友评论

          本文标题:什么是闭包

          本文链接:https://www.haomeiwen.com/subject/dedjkctx.html