2018/10/28/ 看阮一峰博客有感
閉包就是能訪問其他函數(shù)內(nèi)部變量的函數(shù),理解這句話可以從以下幾點開始。
-
閉包為什么是函數(shù)?
解釋這點需要先了解 JavaScript 語言特有的一種結(jié)構(gòu)--鏈式作用域,即為,子對象會一級一級地向上尋找所有父對象的變量。所以,父對象的所有變量,對子對象是可見的,反之則不成立。了解這點后,可做以下推論,外部無法訪問父函數(shù)的局部變量,而子函數(shù)可以訪問父函數(shù)的局部變量,只要將子函數(shù)作為返回值,就可以在外部間接訪問到父函數(shù)的局部變量了。
因此可以把閉包簡單理解成"定義在一個函數(shù)內(nèi)部的函數(shù)"。
所以,在本質(zhì)上,閉包就是將函數(shù)內(nèi)部和函數(shù)外部連接起來的一座橋梁。
-
閉包的作用
一個是前面提到的可以讀取函數(shù)內(nèi)部的變量,另一個就是讓這些變量的值始終保持在內(nèi)存中。
父函數(shù)將子函數(shù)作為返回值,再將子函數(shù)賦值給一個變量,所以子函數(shù)會存在于內(nèi)存中,而子函數(shù)依賴于父函數(shù)存在,所以父函數(shù)也會存在于內(nèi)存中,也就不會被垃圾回收機制回收。