Js函数闭包的理解及闭包的问题的解决

函数闭包

  • 函数就是闭包,当一个函数被创建时,它的内部的语句、变量、函数等,共同形成了闭包。

    这里简单分析下闭包函数执行调用过程
       function outer(){
         var a = 12;
         //形成闭包环境中的变量不是一成不变的,可以被更改
         function inner(){
         console.log(a ++);
         }
         return inner;
         }var inn = outer();
         inn();
         inn();

闭包的用途:

可以在函数外部读取函数内部成员

让函数内成员始终存活在内存中

闭包存在的问题

    //闭包的问题
     var arr = [];
     for(var i = 0;i <= 10;i ++){
             arr[i] = function (){
             console.log(i);
          }
     }//应该是输出对应下标
     arr[0]();//11
     arr[1]();//11
     arr[2]();//11</pre>
这个代码只是想实现根据arr下标,console.log出相应的值。但是当调用时,for循环中的i已经执行完了,i = 11。i的作用域太大了,执行时,i的结果就已经执行完了。
解决方法就是形成一个闭包,将i的作用域从全局缩小变成局部作用域,arr[i]()每执行一次,i的值就执行一次,使i的值依旧可以使用。
       //解决
       var arr = [];
       for (var i = 0; i <= 10; i++) {
       //自调用函数
       (function (i){
       arr[i] = function () {
       console.log(i);
       }
       })(i); 
       }//应该是输出对应下标
       arr[0]();//0
       arr[1]();//1
       arr[2]();//2
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值