匿名函數和閉包

一.匿名函數javascript

把匿名函數賦值給變量java

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.經過閉包返回局部變量   (使用閉包有一個優勢和缺點 ,就是能夠使局部變量駐留在原來的內存中)this

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.循環裏面的匿名函數spa

function box(){

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

   alert(box());


function box(){prototype

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

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



 


3.Javascript 沒有塊級做用域(模仿塊級做用域)blog

 

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();

                          //包含自我執行的匿名函數就能夠實現塊級做用域   每一個開發者能夠使用本身的變量 不會搞壞全局變量

                                私有做用域

                 (function(){

                           var age=100;

                          alert(age);

                       })();

 

                    

 

 

 

 

  關於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      

  

 


私有變量       

 

 function(){

    var age=100;                 // 私有變量     
        
}

   function Box(){
        
        var age=100;
     function run(){

           return "運行中";  
      }
     this.publicgo=function(){                         //對外可見的公共接口 特權方法

          ruturn age+run();
}
     this.getAge=function(){

          return age;
   }

}
 
   var box=new Box();
  alert(box.getAge());

 

  


靜態私有變量

  共享不一樣對象的屬性,都能訪問到被其餘對象改變的值

  (function(){
           
        var user=' ';
       Box=function(value){
          
          user=value;
        }//全局構造函數
        
           Box.prototype.getUser=function(){
               return   user; 
   }
     })();


    var box=new Box('lll');
     alert(box.getUser());
   
    var box2=new Box('kkk');
     alert(box.getUser());

  


 

單例  就是永遠只實例化一次 其實就是字面量對象聲明方式

  var box={

     user:'lll';

    run:function(){



    return " 運行中」;

     }

}
相關文章
相關標籤/搜索