前端学习日记之javascript闭包

废话

    开始前端的学习已经有一个月了,为了筹备下一份工作的面试,这个月里学习了好多的技术。但是因为实在太多东西了,看着看着觉得有点乱。这时候我觉得有必要先整理一下。
    屁话少说,下面带来我的第一次,额,我的意思是我的第一篇博客。以javascript做开头大家应该不会有什么意见。在公司写的,无图,不引狼。

闭包的作用

    跳过解释什么是闭包的科普环节,我理解的闭包的作用是:创造一个(多个)处于全局变量和局部变量之间的第三类变量
    这句话装的有点过,我们先了解下全局变量和局部变量。
    局部变量:在方法体内,并且有用var定义的变量,作用域是方法体内,方法体外无法访问。方法结束后释放内存。
    全局变量:在方法体外定义的,或者是方法体内不用var(隐式)定义的变量。方法体内外都可以用,方法结束也不会释放内存。

举个栗子

var n=0; //全局
function fun(){
    n++;
    alert(n); 
}
fun();//1
fun();//2
    上面的fun()是一个实现累加的方法,每调用一次n的值就加1。缺点是上面的n是一个全局变量,可以被fun()以外的其他函数/语句操作。
    为了保护我们的n,前辈们想了一个方法:给n套一个套套。让n变成局部变量(类似类的私有成员变量)。然后把fun()作为这个套套的返回值返回出去。
function taotao(){
    var n=0;//对于taotao()是局部变量,对于fun()是全局变量。
    function fun(){
    n++;
    alert(n); 
    }
return fun;
}
var fun2 = taotao()
fun2();//1
fun2();//2
fun2 = taotao()
fun2();//1
fun2();//2
fun2 = null;    //释放内存  
    在上一段代码中,由于fun2()是对fun()的引用,而fun()运用到n。所以n不会随着方法的结束而释放,除非fun2()不再对fun()引用。这样,就可以实现累加的功能,同时n也不会被taotao以外的函数修改。同时具有全局变量和局部变量的优点,也就是我说的第三类变量。。。

下面是国际惯例

如果你不幸看了我的博文,但是又不知道我在说啥,请移步↓。
http://www.jb51.net/article/24101.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值