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

 

posted @ 2016-06-30 14:47  那就让我这样吧  阅读(116)  评论(0编辑  收藏  举报