一、變量的作用域
要了解閉包,首先必須了解Javascript特殊的變量作用域。
變量的作用域無非就是兩種:全局變量和局部變量。
Javascript語言的特殊之處,就在于函數内部可以直接讀取全局變量。
二、如何從外部讀取局部變量?
出于種種原因,我們有時候需要得到函數内的局部變量。但是,前面已經說過了,正常情況下,這是辦不到的,隻有通過變通方法才能實作。
那就是在函數的内部,再定義一個函數。
三、閉包的概念
上一節代碼中的f2函數,就是閉包。
各種專業文獻上的“閉包”(closure)定義非常抽象,很難看懂。我的了解是,閉包就是能夠讀取其他函數内部變量的函數。
由于在Javascript語言中,隻有函數内部的子函數才能讀取局部變量,是以可以把閉包簡單了解成“定義在一個函數内部的函數”。
是以,在本質上,閉包就是将函數内部和函數外部連接配接起來的一座橋梁。
--------------------------------------------------------------------------------------------------------b
四、閉包的用途
閉包可以用在許多地方。它的最大用處有兩個,一個是前面提到的可以讀取函數内部的變量,另一個就是讓這些變量的值始終保持在記憶體中。