• 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
  • 相关阅读:
    More on wrapper types
    使用Solr索引MySQL数据
    Java线程池
    Jedis-returnResource使用注意事项
    sh脚本异常,binsh^M bad interpreter No such file or directory
    Java集合类从属关系
    SonarQube+Jenkins,搭建持续交付平台
    初始化块和静态初始化块的区别
    从SonarQube谈设计模式
    Github+Hexo,搭建专属网站
  • 原文地址:https://www.cnblogs.com/dreamtown/p/14542392.html
Copyright © 2020-2023  润新知