匿名函数和闭包

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了匿名函数和闭包相关的知识,希望对你有一定的参考价值。

一.匿名函数

把匿名函数赋值给变量

var box=function(){

               return ‘lee‘;
}

alert(box());

通过表达式自我执行

(function(){

               return ‘lee‘;
})();


把自我执行后的函数赋值给box;
var box=(function(){

               return ‘lee‘;
})();
alert(box);

二. 闭包

function box (){

  return function(){

             return ‘lee‘;
    }
}

alert(box()());

var b=box();

alert(b()); //更灵活一点

1.通过闭包返回局部变量   (使用闭包有一个优点和缺点 ,就是可以使局部变量驻留在原来的内存中)

function box(){
    var age=100;
    
return  function(){

               return age;

    }


}

---------------------------
function box(){

var age=100;
return function(){

age ++;
return age;


}
}

var b=box();
alert(b());
alert(b()); 从而实现累加

 


 2.循环里面的匿名函数

function box(){

      var  arr=[];
      for (var i = 0; i < 5; i++) {
           arr[i]=(function(num){
           	    return num;
           })(i);
      }
     return arr;
}

   alert(box());

-----------------------------------------

function box(){

var arr=[];
for (var i = 0; i < 5; i++) {
arr[i]=(function(num){                                                                      驻留在作用域
return num; 
})(i);
}
return arr;
}

var box1=box();
for (var i = 0; i < 5; i++) {
alert(box1[i]);
}



 


3.javascript 没有块级作用域(模仿块级作用域)

function box(){

      var  arr=[];
      for (var i = 0; i < 5; i++) {
      	 
      }
     alert(i);                                      仍然可以调用i
}

box();          


包含自我执行的匿名行数 就可以使用块级作用域 私有域控制全局变量


                        function box(){

                              (function(){
                                   for (var i = 0; i < 5; i++) {

                                  }})();
                                         alert(i);
                     }

                                 box();

  关于this对象

在闭包中this指向的是Window

  

var  box ={
          user:‘abc‘,

          getUser:function(){ 
                        
 var   that=this;  return function(){ return this;

return that; } } } alert(box.getUser()()); object window

  解决办法1.对象冒充        alert(box.getUser().call(box)); 否则会发生内存泄漏

     解决办法办法2  var   that=this      

  

 

以上是关于匿名函数和闭包的主要内容,如果未能解决你的问题,请参考以下文章

Golang中的匿名函数(闭包)

Go语言-make陷阱和闭包函数

14.匿名函数和闭包

自调用匿名函数(匿名闭包)解析与调用

自调用匿名函数(匿名闭包)解析与调用

php匿名函数和闭包函数及use关键字传参及Closure匿名函数类