• js的闭包


    //即使外部函数已经返回,当前函数仍然可以引用在外部函数内部引用的变量
    function test() {
    var s1 = "mytest";
    function test1(x) {
    return s1 + x;
    }
    return test1;
    }
    var ss = new test();
    alert(ss(5));//mytest5


    js函数值还在内部存储它们可能会引用的定义在其封闭作用域的变量。那些在其所涵盖的作用域内跟踪变量的函数被称为闭包,

    上面实例中:test1 就是个闭包,它引用了两个外部变量

    总结:函数可以在其作用域内,引用自己作用域内的任何变量,还可以引用外部函数的声明的变量

    注意:因为只需要产生一个新值,不需要在局部使用,所以可以不需要给该函数命名

     function test2() {
            var s1 = "mytest";
            return function (x) {
                return s1 + x;
            }
        }
        var ss = new test2();
        alert(ss(5));//mytest5

    闭包其实存储了外部变量的引用,而不是外部变量的复制品,如果在闭包内部对外部变量值的修改,则外部变量实质值也发生变化

    例:

     function test() {
            var s = undefined;
            return {
                set: function (a) {  s = a; },
                get: function () { return s; },
                type: function () { return typeof (s);}
            };
        }
        var test2 = test();
        alert(test2.type());//undefined
        test2.set(5);
        alert(test2.get());//5
        alert(test2.type());//number

    这 set ,get,type,共享s变量

    总结:1 函数可以引用定义在其外部作用域的变量

             2 闭包在其内部存储外部作用域的变量的引用,可以直接操作这些变量

              3 闭包比创建它的函数的生命周期更长

  • 相关阅读:
    Windows10下VirtualBox安装CentOS7网络配置:添加DNS
    Windows下LaTeX环境: SumatraPDF + notepad++/ST3
    Windows10 环境变量设置: "此环境变量太大"
    修改CMD字体后导致乱码的恢复方法
    nfs:server is not responding,still trying 原因与解决方案
    [GIT] 更新.repo目录
    linux网络栈相关
    linux mailbox模型
    虚拟机ping不通主机,主机能ping 通虚拟机问题解决
    pygame学习
  • 原文地址:https://www.cnblogs.com/niuzaihenmang/p/5629941.html
Copyright © 2020-2023  润新知