js闭包总结

学了,也看了一些关于闭包的东西,做个总结,以备不时之需,可能有不足的地方,我对闭包也不是很了解。

一、什么是闭包?
闭包百度一搜,会有太多的解释。
闭包就是嵌套在函数里面的内部函数,并且该内部函数可以访问外部函数声明的所有局部变量、参数、和其它内部函数。当该内部函数在外部函数被调用时就生成了闭包。

说了一堆,举例说明:

function wai(){
    var num=1;
    function nei(){
        alert(num);
    }
    return nei;  
}
nei()函数就是一个闭包。
var fn=wai();
fn();  //1, 相当于wai()()

二、好处
1、可以读取函数内部的变量,
2、可以让这些局部变量保存在内存中,实现变量数据共享。

还是以上面的代码分析,第一个好处,nei()函数可以访问外部函数的变量num

第二个好处:
function wai(){
    var num=1;
    function nei(){
        alert(num);
        num++;
    }
    return nei;  
}
var fn=wai();
fn();  //1
fn();  //2
fn();  //3
fn();  //4
不断递增,这就实现了变量数据共享。

三、缺点
1、由于闭包会使得函数中的变量都保存在内存中,一方面会使内存消耗大,另一方面在ie下导致内存泄露(不太懂,但是听上去感觉很严重的样子),结局办法,在退出函数时,将不使用的局部变量全部删除(null掉吧)

2、闭包会在父级外部,改变父函数内部内部变量的值(例子中的num);所以,如果你把父函数当作对象(object)使用,把闭包当做它的公用方法,把内部变量当做它的私有属性,这时你需要做的是,加倍小心,不要随便改变函数的值,否则你会后悔的。

四、总结
现在可能是学的也不深,对闭包真的感觉没有用到,所以也没有切身的体会,一直被听说,不明觉厉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值