1. 程式人生 > >閉包就這麼簡單

閉包就這麼簡單

先撤點題外話,最開始接觸這個專業術語,我首先聯想到的是女孩子們口中常常提到的“閉口”,一種無法突破錶皮最外層、長時間被圈禁在表皮下的痘痘胚胎,大致這麼理解吧。其實,這個客觀世界裡的小東西確實和計算機語言中的閉口有那麼幾分相似,首先,內部;其次,封閉。

那麼什麼是閉包? 閉包就是定義在 一個函式 內部 的 函式。

舉個例子:

function init(){

    var name ='ah';         //init作為父函式,變數name是一個被init建立的區域性變數
    
    function useName(){        //useName()作為內部函式,就是一個閉包

       console.log(name);        //  使用了父函式中宣告的變數
    }
    
    useName();
    

}

init();

如果內部函式useName()引用了位於外部函式的變數name,

當外部函式呼叫完畢後,這些變數在記憶體中不會被 釋放,因為閉包useName()需要它們.

匿名函式(anonymous function)本身就是一個閉包,所有巢狀在function中的function都是一個強大的閉包。

簡述閉包的用途:一個是前面提到的可以讀取函式內部的變數,另一個就是讓這些變數的值始終保持在記憶體中,避開garbage collection的扼殺。

再來看看官方回答:閉包是一個擁有許多變數和綁定了這些變數的環境的表示式(通常是一個函式),因而這些變數也是該表示式的一部分。(這句話是copy,表示自己也不想看,因為看不懂啊)我還是循序漸進,從簡單易懂開始瞭解它吧,後續會跟進,畢竟閉包這個東西還有許多知識值得大家細細琢磨。