什么是閉包?為什么使用閉包?閉包的缺點?


閉包:即重用一個變量,又保護變量不被污染的一種機制。

為什么使用閉包 : 全局變量和局部變量都具有不可兼得的優缺點。

   全局變量:  優: 可重用, 缺: 易被污染。

   局部變量:  優: 僅函數內可用,不會被污染。

          缺: 不可重用!

 

何時使用: 只要即重用一個變量,又保護變量不被污染時。

 如何: 3步:

   1. 用外層函數包裹要保護的變量和內層函數。

   2. 外層函數將內層函數返回到外部。

   3. 調用外層函數,獲得內層函數的對象,保存在外部的變量中——形成了閉包。  

 

閉包形成的原因: 外層函數調用后,外層函數的函數作用域(AO)對象無法釋放,被內層函數引用着。

 

閉包的缺點:

   比普通函數占用更多的內存。

   解決:閉包不在使用時,要及時釋放。

   將引用內層函數對象的變量賦值為null。

<script>

//1. 用外層函數包裹要保護的變量和內層函數

  function outer(){
    var i=1;
  //2. 外層函數返回內層函數對象到外部
    return function(){
      console.log(i++);
    }
  }
  //3. 調用外層函數獲得內層函數對象
  var getNum=outer();
  //getNum:function(){ console.log(i++); }
  getNum();//1
  getNum();//2
  i=1;
  getNum();//3
  getNum();//4
</script>

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM