欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

闭包12.17

程序员文章站 2022-07-15 14:18:18
...

一、 闭包

闭包就是能够读取其他函数内部变量的函数(函数里面套函数,内部函数访问外部函数变量),在本质上,闭包是将函数内部和函数外部连接起来的桥梁。
闭包中的变量会一直存储在内存中,类似全局变量

1.闭包的应用场景:

 //点击li时,输出自身的位置
        //  var lis=document.querySelectorAll('ul li');
        //  for(var i=0;i<lis.length;i++){
        //      lis[i].οnclick=function(){
        //          console.log(i);//4
        //      };
        //  }
        //i是一个全局变量  for循环执行完了之后i的值4

        //点击li,执行事件函数,打印i,全局变量的i值为4
        var lis = document.querySelectorAll('ul li');
        for (var i = 0; i < lis.length; i++) {
            (function (i) {//形参
                lis[i].onclick = function () {
                    console.log(i);//0 1 2 3
                };
            })(i);//实参
        }
    </script>

//当点击事件执行时,打印i,打印是局部变量i,不再是全局变量i

2.闭包经典面试题

  <script>
        // var arr=[];
        // for(var i=0;i<10;i++){
        //     arr.push(function(){
        //         console.log(i);
        //     })
        // }
        // arr[6]();//10
        //问题的解决
        var arr=[];
        for(var i=0;i<10;i++){
            arr.push(
                (function(i){
                    return function(){
                        console.log(i);
                    }
                })(i)
            )
        }
        arr[6]();//6
        arr[0]();//0
    </script>