zoukankan      html  css  js  c++  java
  • js 闭包的用法详解

    一、闭包

    实现可重用的局部变量,且保护其不受污染的机制。

    1. 外层函数包裹受保护的变量和内层函数。
    2. 内层函数专门负责操作外层函数的局部变量。
    3. 将内层函数返回到外层函数外部,反复调用。

    二、作用域

    子函数会一级一级地向上寻找所有父函数的变量。所以,父函数的所有变量,对子函数都是可见的,反之则不成立。

    三、函数调用

    1. 外层函数调用了几次,就有几个受保护的局部变量副本。
    2. 同一次外层函数调用返回的多个内层函数,共同用一个局部变量。
    3. 闭包的局部变量不能释放。
    4. 尽量不要在定时器中使用闭包。因为闭包的外层函数定义的变量不能释放,但是定时器使用中需要释放。

    四、内层函数使用不同变量的实例详解

    1、内层函数使用自己的变量

    内层函数使用自己的变量,调用完后,直接释放。

    function outerFun(){
        function innerFun(){
            var innerVar = 0;
              innerVar++;
            alert(innerVar);
        }
        return innerFun;
    }
    var globVar1 = outerFun();
    globVar1();        // Alert 1
    globVar1();        // Alert 1
    var innerVar2 = outerFun();
    innerVar2();    // Alert 1
    innerVar2();    // Alert 1

    2、内层函数使用全局变量

    全局变量释放,是在所有代码运行完成后。

    var globVar = 0;
    function outerFun(){
        function innerFun(){
            globVar++;
            alert(globVar);
        }
        return innerFun;
    }
    var globVar1 = outerFun();
    globVar1();  // Alert 1
    globVar1();  // Alert 2
    var globVar2 = outerFun();
    globVar2();  // Alert 3
    globVar2();  // Alert 4

    3、内层函数使用外层函数变量(闭包)

    • 外层函数调用几次就有几个被保护的局部变量副本。
    • 闭包的局部变量不被释放。
    function outerFun(){
        var outerVar = 0;
            function innerFun(){
            outerVar++;
            alert(outerVar);
         }
        return innerFun;
    }
    var globVar = outerFun();
    globVar();  // Alert 1
    globVar();  // Alert 2
    var globVar2 = outerFun();
    globVar2();  // Alert 1
    globVar2();  // Alert 2
  • 相关阅读:
    hdoj_1016Prime Ring Problem
    毛玻璃
    HDOJ1175连连看
    const小结
    指向二维数组的指针
    关于对ACM OJ大数据递归栈溢出问题的解决方案
    Hessian的使用与介绍
    Tomcat调优
    ant使用
    ant使用
  • 原文地址:https://www.cnblogs.com/minigrasshopper/p/8056441.html
Copyright © 2011-2022 走看看