• 闭包


    闭包

    理解js中的闭包,首先理解JavaScript中的作用域以及作用域链的问题

    当一个函数嵌套另外一个函数,外部函数将嵌套函数对象作为返回值返回的时候,把这种情况成为闭包

    eg:

      function fun1(){

              var  a=100;    //声明局部变量 a

       function fun2(){    //嵌套函数,在作用域里

        console.log(a)

      }

      return fun2  //调用嵌套函数fun2,并将fun2的执行结果返回

    }

    var fun=fun1();

    fun()  //输出结果:100

    fun()  //输出结果:100

    函数fun()声明了一个局部变量,并定义了一个函数fun2,最后将函数的执行结果返回,输出值1

    eg:

      function fun1(){

              var  a=100;    //声明局部变量 a

       function fun2(){    //嵌套函数,在作用域里

        a++;

        console.log(a);

      }

      return fun2  //调用嵌套函数fun2,并将fun2的执行结果返回

    }

    var fn1=fun1();

    var fn2=fun1();

    fn1()  //输出结果:101

    fn1()  //输出结果:102

    fn2()  //输出结果:101

    fn2()  //输出结果:102

    现在函数fn1仅仅返回函数内嵌套的一个函数对象,而不是直接返回结果,在定义函数作用域的外面调用函数,由于这个函数作用域链式在函数定义的时候就以及创建的,嵌套的函数在定义在这个作用域链里,并且变量a又是局部变量,不管在何时何地执行函数,这种绑定依然有效。因此,局部变量会一直保存下来。

    闭包实现

    当一个函数创建后,它保存了一个作用域链,并且作用域链会被函数中的作用域可访问的对象num填充

  • 相关阅读:
    CSP-S2020总结
    题解-P6687 论如何玩转 Excel 表格
    题解-UVA12995 【Farey Sequence】
    题解-P4159 [SCOI2009] 【迷路】
    题解-SP2916【GSS5
    102. 二叉树的层序遍历
    力扣 160 相交链表 快慢指针 双指针
    3. 无重复字符的最长子串 滑动窗口
    最大连续1的个数 III
    B树和B+树
  • 原文地址:https://www.cnblogs.com/3542446186qq/p/10139155.html
Copyright © 2020-2023  润新知