码迷,mamicode.com
首页 > 其他好文 > 详细

闭包的理解

时间:2014-07-03 07:07:12      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   strong   cti   for   

function A(){
   var a=1;
   function B(){
       return a++;
   };
   return  B;
};


var  C=A();//C取得B的访问接口,B是A的子作用域
console.log(C());//2    C能访问到A作用域中的变量a了

这是闭包的经典案例,相信大家都很熟悉,a是作用域A的私有变量,原本是无法直接访问的,但是A的子作用域B可以取得A的变量a,我们把B付给作用域C后,这时就可以在作用域C中,去访问作用域A的变量a,但此时A的作用域并不存在,而它的变量a却可以一直存在,没有随作用域的销毁而消失,这就是闭包。

闭包的本质:在子作用域中保存了一份在父级作用域取得的变量,这些变量不会随父级作用域的销毁而销毁,因为他们已经常驻内存了!

闭包的特性:1:因为常驻内存所以会造成内存泄露  2,只要其他作用域能取到子作用域的访问接口,那么其他作用域就有方法访问该子作用域父级作用域的变量了。

看一个闭包的应用:

~function test() {   
    for( var i=0; i<5; i++ ) { 
         (function(a){
             $("#p"+i).bind("click", function() {
                alert(a);
             });
         })(i); 
   };
}();

上面这个是点击每个段落,弹出段落序号的应用,相信大家有遇到过。

 再看一个不错的应用:

function A(){
    var b = 1;
    return {
        get: function(){return b;},
        set: function(val){b = val;}
    }
}
var a = A();
a.set(3);
a.get();

上面对于受保护的变量b的修改和读取,我们只能通过set和get接口来访问。

闭包的理解,布布扣,bubuko.com

闭包的理解

标签:style   blog   color   strong   cti   for   

原文地址:http://www.cnblogs.com/bjmumu/p/3818430.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!