欢迎光临
我的个人博客网站

Js函数闭包的理解及闭包存在一些问题的解决


函数闭包

  • 函数就是闭包,当一个函数被创建时,它的内部的语句、变量、函数等,共同形成了闭包。
    Js函数闭包的理解及闭包存在一些问题的解决
    这里简单分析下闭包函数执行调用过程
       function outer(){          var a = 12;          //形成闭包环境中的变量不是一成不变的,可以被更改          function inner(){          console.log(a ++);          }          return inner;          }         ​          var inn = outer();          inn();          inn(); 

Js函数闭包的理解及闭包存在一些问题的解决

闭包的用途:

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

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

闭包存在的问题

    //闭包的问题      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
赞(0) 打赏
未经允许不得转载:张拓的天空 » Js函数闭包的理解及闭包存在一些问题的解决
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

专业的IT技术经验分享 更专业 更方便

联系我们本站主机

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏