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

  • 2019 年 11 月 12 日
  • 筆記

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

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

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

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

       缺: 不可重用!

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

如何: 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>