闭包的应用

什么是闭包

是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。闭包在运行时可以由多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。

函数嵌套形成的闭包,闭包包括函数本身以及它的外部作用域。使用闭包可以形成独立的空间,延长变量的声明周期,保存中间状态值。

闭包的优点:① 实现封装,减少全局变量命名冲突;②保存自己的私有变量;③可以读取函数内部的变量。
闭包的缺点:①内存泄漏:由于闭包会使得函数种的变量都被保存在内存种,内存消耗大,所以不能滥用闭包,否则会造成网页的性能泄漏问题,在IE中可能导致内存泄漏。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
② 闭包在父函数外部,改变父函数内部变量的值。不要随意改变父函数内部的值。

1.缓存变量的值

function createInc(startValue){
    let index = -1;
    return (step) => {
      startValue += step;
      index ++;
      return [index, startValue];
    }
}

箭头函数中的index,startValue是外部变量。

2.闭包模拟私有方法
私有方法限制对代码的访问,而且可以用于管理全局变量命名,避免扰乱公共代码。

let Count = (function() {
   let privateCounter = 0;
   function changeBy(val) {
     privateCounter  += val;
   }
   return {
      increment:function(){
         changeBy(1);
      },
      decrement:function(){
         changeBy(-1);
      },
      value:function(){
        return privateCounter;
      }
   }
})();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简 。单

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值