• 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 闭包比创建它的函数的生命周期更长

  • 相关阅读:
    AE开发中Geometry到Polyline/Polygon的转换--转载
    asp.net MVC Views-----Controller传递数据方法
    百度翻译APi接口实现
    javascript添加删除行信息
    XMLDocument
    GDI绘制图像
    测试局域网内网络数据
    HL7 V2 分隔符
    IHE-PIX 备注
    数据库关键字 (Oracle, SQL Server, DB2)
  • 原文地址:https://www.cnblogs.com/niuzaihenmang/p/5629941.html
Copyright © 2020-2023  润新知