關於JS中的閉包淺談

來源:互聯網
上載者:User

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

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

可能這樣的理解也太抽象了,並不是那麼簡單易懂!執行個體吧:

複製代碼 代碼如下:
<script type="text/javascript">

function A(){
    var S=0;
    function B(){
        alert(++S);
    }
    return B;
}
var C=A();
C();
</script>

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

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

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

2、讓這些變數始終保持在記憶體中

複製代碼 代碼如下:
<script type="text/javascript">

function A(){
 var S=1;
 D=function(){
        S+=1;
    }
 function B(){
  alert(S);
 }
    return B;
}
var C=A();
C(); // 輸出1
D();
C(); // 輸出2

 </script>

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

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.