美文网首页
封闭函数闭包

封闭函数闭包

作者: Taoqi思 | 来源:发表于2018-11-04 20:13 被阅读0次

    封闭函数

    封闭函数是javascript中匿名函数的另外一种写法,创建一个一开始就执行而不用命名的函数。

    一般定义的函数和执行函数:

    function changecolor(){
        var oDiv = document.getElementById('div1');
        oDiv.style.color = 'red';
    }
    changecolor();
    

    封闭函数:

    (function(){
        var oDiv = document.getElementById('div1');
        oDiv.style.color = 'red';
    })();
    

    还可以在函数定义前加上“~”和“!”等符号来定义匿名函数

    !function(){
        var oDiv = document.getElementById('div1');
        oDiv.style.color = 'red';
    }()
    

    闭包

    什么是闭包?

    函数嵌套函数,内部函数可以引用外部函数的参数和变量,参数和变量不会被垃圾回收机制收回

    function aaa(a){      
          var b = 5;      
          function bbb(){
               a++;
               b++;
             alert(a);
             alert(b);
          }
          return bbb;
      }
     var ccc = aaa(2);
     ccc();
     ccc();
    

    改写成封闭函数的形式:

    var ccc = (function(a){
      var b = 5;
      function bbb(){
           a++;
           b++;
         alert(a);
         alert(b);
      }
      return bbb;
    })(2);
    ccc();
    ccc();
    
    用处:

    1、将一个变量长期驻扎在内存当中,可用于循环中存索引值

    <script type="text/javascript">
        window.onload = function(){
            var aLi = document.getElementsByTagName('li');
            for(var i=0;i<aLi.length;i++)
            {
                (function(i){
                    aLi[i].onclick = function(){
                        alert(i);
                    }
                })(i);
            }
        }
    </script>
    ......
    <ul>
        <li>111</li>
        <li>222</li>
        <li>333</li>
        <li>444</li>
        <li>555</li>
    </ul>
    

    2、私有变量计数器,外部无法访问,避免全局变量的污染

    <script type="text/javascript">
    
    var count = function(){
        var a = 0;
        function add(){
            a++;
            return a;
        }
        return add;
    })()
    count();
    count();
    var nowcount = count();
    alert(nowcount);
    </script>
    

    相关文章

      网友评论

          本文标题:封闭函数闭包

          本文链接:https://www.haomeiwen.com/subject/bkldxqtx.html