什麼是閉包?

nenliu發表於2018-09-10

簡單來說,可以訪問外部環境變數的函式就是閉包

為了更好地理解閉包,需要了解一下區域性變數和全域性變數,我們只需要知道,在函式內部可以直接讀取到全域性變數,但是在函式外部是無法讀取函式體內的區域性變數的。

所以就需要考慮以下場景:

出於種種原因,我們需要得到函式內部的區域性變數。

這個時候的做法就是,在函式的內部再定義一個函式,那麼此時內部函式是可以訪問外部函式中的變數的,所以,我們可以把內部函式作為外部函式的返回值,這樣,就可以在外部函式也就是全域性環境下讀取到這個區域性變數啦!具體實現如下:

function outer(){
	var a=1;
	function inner(){
		return a;
	}
	return inner();
}

outer(); //1

也就是說,在上段程式碼裡面,內部函式inner就是一個閉包。

那麼對閉包的另一層理解就是,閉包是定義在一個函式內部的函式

本質上來說,閉包就是將函式內部和函式外部連線起來的一座橋樑。【阮老師說滴】

閉包的用途:一是讀取函式內部的變數,二是讓這些變數的值始終保持在記憶體中。

因此可以聯想到,閉包最需要被注意到的一個缺陷就是記憶體的問題。

相關文章