关于闭包的一点点概念

为什么会形成闭包呢?
当内部函数被保存到外部的时候,就会生成闭包。也就是说,当有函数嵌套时,里面的函数被保存到全局,就会产生闭包。

闭包带来的影响
导致原有作用域链不释放,造成内存泄漏(其实是指由于产生闭包,导致内存被占用,可用的内存减少了,可以看作是内存泄漏)。
闭包的作用

  • 实现共有变量
  • 可以做缓存
  • 可以实现封装,属性私有化
  • 模块化开发,防止污染全局变量
    有一个下面的这种例子,我觉得是非常经典滴闭包问题了。
function test(){
     var arr = [];
     for(var i = 0;i < 10;i++){
    //最终的函数体里面i变为10
         arr[i] = function(){
         document.write(i + " ");
     }
      return arr;
 }
     var myArr = test();
     for(var j = 0; j < 10; j++){
         myArr[j]();
     }

第一次看到这个题,可能很多人都会和我一样,以为最后的输出结果会是:0123456789,然而结果是直接输出10个10.
所以产生这种问题的原因就是因为闭包,在test函数里面,把arr的结果保存了起来,当在外部再进行调用时,i已经变成了10。解决这种问题可以使用立即执行函数的方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值