美文网首页
封闭函数和闭包

封闭函数和闭包

作者: 飘零_0f71 | 来源:发表于2019-04-08 19:02 被阅读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/eggpiqtx.html