JavaScript[17] -- 闭包

JavaScript的回收机制

  • 浏览器本身作。
  • 全局做用域声明一个变量不会被回收,只有关闭浏览器以后才回收。
  • 在局部做用域里面,变量在函数体执行完以后,就会被回收。浏览器

    <script>
        function func(){
            var x = 1;
            console.log(x); // 变量x在函数执行完毕后,会被回收
        };
        func();             // 1
        console.log(x);     // x is not defined 
    </script>

闭包

  • 能够访问其余函数做用域里变量或者参数的函数(闭包会形成局部变量不被销毁)。闭包

    <script>
        (function(){
             var x = 1;
             console.log(x)
         })();//这不是一个闭包,这只是一个函数表达式的自执行
        
         function fn(){
             var y = 2;
             return y;   //能够获取内部函数的变量,但不是闭包
         };
         var b = fn();
         console.log(b);
    
         var m = 1;
         function func1(){
             var m =10;
             return function(){
                 m++;
                 console.log(m);
             }
         }
         var n = func1();
         n();        // 11
    </script>
  • 建立闭包:一个函数里面嵌套一个函数,内部函数引用外部函数的变量或者参数函数

    <div>11</div>
    <div>22</div>
    <div>33</div>
    <div>44</div>
    <div>55</div>
    
    <script>
        var boxes=  document.getElementsByTagName("div");
        len = boxes.length;
    
        // 建立闭包须要两个函数
        for(var i = 0; i < len; i++){
           
            // 闭包写法一
            func1(i);
            function func1(index){
                boxes[index].onclick = function(){
                    console.log(index);
                }
            }
    
            // 闭包写法二
            (function(index){
                boxes[index].onclick = function(){
                    console.log(index);
                }
            })(i)   // 自执行中带参数           
        }
    </script>
相关文章
相关标签/搜索