码迷,mamicode.com
首页 > 其他好文 > 详细

匿名函数和闭包

时间:2016-09-04 20:38:02      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

一.匿名函数

把匿名函数赋值给变量

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      

  

 

匿名函数和闭包

标签:

原文地址:http://www.cnblogs.com/france-008/p/5839973.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!