首页 > 代码库 > 闭包的理解
闭包的理解
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接口来访问。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。