• 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
  • 相关阅读:
    VECTOR的用法
    【转】C/C++中的Split函数(字符串自动分割)
    【转】动态树
    【实验】vector性质
    【转】Android操作系统安全研究系列——键盘记录
    D8神贴
    【操作系统】修改WIN7下的文件关联与默认程序
    【转】探寻C++最快的读取文件的方案(方法未论证)
    如何在60分钟之内过掉600个单词
    【转】动态树:实现
  • 原文地址:https://www.cnblogs.com/minigrasshopper/p/8056441.html
Copyright © 2020-2023  润新知