闭包

作者: 璇子是兔子 | 来源:发表于2019-07-16 17:53 被阅读0次

    闭包用于突破作用域function(){},指有权访问另一个函数作用中的变量的函数。

    1. 将函数中的变量可在函数外部访问
    eg1:
    function test1(){
                var x=10;
                return function(){
                    return x;
                }
            }
            var a=test1();
            console.log(a());//10
    
    eg2:
    var y;
            function test2(){
                var x=10;
                y=function (){
                    return x;
                }
            }
            test2();
            console.log(y());//10
    
    eg3:
     function test3(e){
                var y=function(){
                    return e;
                }
                e++;
                return y;
            }
            var c=test3(123);
            console.log(c());//124
    
    1. 闭包解决的函数内变量的输出问题
    //直接输出变量只能获取最后变量状态
    function test4(){
                var x=[];
                var i;
                for(i=0;i<3;i++){
                    x[i]=function(){
                        return i;
                    }
                }
                return x;
            }
            var d=test4();
            console.log(d[0]());//3
            console.log(d[1]());//3
            console.log(d[2]());//3
    
    
    //使用自调用函数(IIFE)
    function test4(){
                var x=[];
                var i;
                for(i=0;i<3;i++){
                    x[i]=(function(a){
                        return function(){
                                  return al
                                 };
                    })(i)
                }
                return x;
            }
            var d=test4();
            console.log(d[0]());//0
            console.log(d[1]());//1
            console.log(d[2]());//2
    
    //使用子函数
    function test5(){
               function childxx(a){
                   return function(){
                                return a;
                      };
               }
                var x=[];
                var i;
                for(i=0;i<3;i++){
                    x[i]=childxx(i);
                }
                return x;
            }
            var d=test5();
            console.log(d[0]());//0
            console.log(d[1]());//1
            console.log(d[2]());//2
    
    

    注:let即可解决

    1. 闭包应用于内部变量的设置,使内部变量不暴露于外面
    var  getValue,setValue;
            void function(){
                var x=0;
                getValue=function(){
                    return x;
                };
                setValue=function(a){
                    x=a;
                };
            }();
            console.log(getValue());//0
            setValue(10);
            console.log(getValue());//10
    

    4.迭代器

       function dada(x){
                var i=0;
                return function(){
                    return x[i++];
                }
            }
            var next=dada(['a','b','c']);
            console.log(next());//a
            console.log(next());//b
            console.log(next());//c
    

    相关文章

      网友评论

          本文标题:闭包

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