js中的“閉包”


姓名:閉包

官方概念:閉包是一個擁有許多變量和綁定了這些變量的環境的表達式(通常是一個函數),因而這些變量也是該表達式的一部分。

( ⊙o⊙ )!!!這個也太尼瑪官方了撒,作為菜鳥的我根本無法理解它想表達個什么意思!但是作為一只好奇的菜鳥又很想知道“閉包”到底是個什么東西!所以最終找到了傳說中的“度娘”幫忙!還算有了一點小小的理解!

個人見解:在函數體內定義另外的方法函數,而這個方法函數被函數以外的變量引用,這時就形成了閉包!

可能這樣的理解也太抽象了,並不是那么簡單易懂!實例吧:

 1 <script type="text/javascript">
 2 
 3 function A(){
 4     var S=0;
 5     function B(){
 6         alert(++S);
 7     }
 8     return B;
 9 }
10 var C=A();
11 C();
12 </script>

 

上面這一段代碼就創建了一個閉包,因為當函數執行到var C=A();時,表面上看C指向的是A函數,而實際上C所指向的函數是B函數,所以再執行到C()的時候就會輸出2;這樣的話B函數就被A函數以外的變量引用了,根據個人見解,創建了一個閉包!

當我在小小的了解了什么時候閉包后也順便看了哈閉包的用途,據說閉包的用途主要有兩點

1、可以讀取函數內部的變量

2、讓這些變量始終保持在內存中

 

 1 <script type="text/javascript">
 2  
 3 function A(){
 4  var S=1;
 5  D=function(){
 6         S+=1;
 7     }
 8  function B(){
 9   alert(S);
10  }
11     return B;
12 }
13 var C=A();
14 C(); // 輸出1
15 D();
16 C(); // 輸出2
17    
18  </script>

 

 

 

上面的代碼中C指向的還是是B函數,C執行了兩次,第一次輸出1,第二次輸出2,這證明了S一直被保存在內存中,並沒有在A函數在被調用后自動清除,這是為什么呢,原因是因為B函數被賦給了一個全局變量,這導致了B函數一直在內存中,而B函數的執行又需要依賴着A函數,所以A也一直在內存中,不會在調用結束后被回收!(這樣的理解貌似有點不專業)!

表達完畢,請廣大群眾多多指教!


免責聲明!

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



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