闭包

  • 定义
  1. 引用了自由变量的函数
  2. 函数+它自己引用的变量=闭包
        //定义了一个外层函数
        function foo(x){
            var tmp = '3';  //定义了一个局部变量
            return function(y){   //把一个函数作为返回值返回
                console.log(x+y+(++tmp));  
                // 可访问以下内容自己有的y  父级的tmp、x  顶级的bar
            }
        }
        //调用foo方法执行,并把返回的函数给了bar变量
        var bar = foo(2); 
        //bar是一个全局变量,此时bar指向匿名函数,所以bar是个闭包-
        //-闭包体是匿名函数+x+tmp(x、跟tmp是父级的)
        bar(10);
        bar(20);
  • 匿名自执行函数
        //常规写法
        var t = function (a){
            console.log(a);
        };
        t(9);  
        //尽量避免定义全局变量,容易造成命名冲突
        //自执行函数写法
        (function(a){      //模拟块级作用域名
            console.log(a);
        })(9)
        //匿名自执行函数
        (function(a1){
            //模拟块级作用域
            var m = 10;
            console.log(a1);
            console.log(m);
        })(8);

你可能感兴趣的:(闭包)