丁小柒javascript进阶-闭包

何为闭包,所谓闭包就是在一个函数内创建一个新函数,通过这个函数来调用外面的局部变量,主要是为了设计私有的方法和变量,使用闭包会增大内存使用量,使用不当很容易造成内存泄露,但是可以避免全局变量的污染

function out() {  
          var a = 1;  
          return function(a){//使用匿名函数实现局部变量驻留内存中,从而实现累加
           return a++;
          };  
        }         
        var fun = out();  
        fun();// 1 执行后 ++a,,然后a还在~  
        fun();// 2   
        fun = null;//a被回收

闭包的变量如果不被收回,那么会一直存在,消耗内存
在如上的例子中,我们会发现,一个函数套用了一个函数,所以我们有时候会看到如下的调用方法 fun()();
如果以上面的代码为例,那么

var fun=out(); 
console.log(fun);    //输出function(){return a++; }; 
var fun=out()(); 
console.log(fun);    //输出1  

这是因为函数内另一个函数也是作为返回的值而存在,所以我们可以直接通过这样的方法来调用内部返回函数,那么如果是var fun=out()(2);那么返回值是什么呢,如果在全局里定义一个var a=3;
是不感觉到迷惑了,其实这里有个小技巧,当一个变量被返回之后,会被返回给离他最近的一个相同名称的变量.

私有成员

var out = (function(){     //使用匿名函数
        var a = 1;         //定义私有变量
        function fir(){    //私有函数
              return  a++;

        }
         function sec(){
            return a++;

        }
      return {
                a:fir,             //使用json结构来储存函数并返回
                b:sec
        }
})();
out.b();     //2
out.c()      //3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值