2018/10/28/ 看阮一峰博客有感
閉包就是能訪問其他函數(shù)內部變量的函數(shù)驾窟,理解這句話可以從以下幾點開始庆猫。
-
閉包為什么是函數(shù)?
解釋這點需要先了解 JavaScript 語言特有的一種結構--鏈式作用域绅络,即為月培,子對象會一級一級地向上尋找所有父對象的變量。所以恩急,父對象的所有變量杉畜,對子對象是可見的,反之則不成立衷恭。了解這點后此叠,可做以下推論,外部無法訪問父函數(shù)的局部變量随珠,而子函數(shù)可以訪問父函數(shù)的局部變量灭袁,只要將子函數(shù)作為返回值,就可以在外部間接訪問到父函數(shù)的局部變量了窗看。
因此可以把閉包簡單理解成"定義在一個函數(shù)內部的函數(shù)"茸歧。
所以,在本質上显沈,閉包就是將函數(shù)內部和函數(shù)外部連接起來的一座橋梁软瞎。
-
閉包的作用
一個是前面提到的可以讀取函數(shù)內部的變量,另一個就是讓這些變量的值始終保持在內存中拉讯。
父函數(shù)將子函數(shù)作為返回值涤浇,再將子函數(shù)賦值給一個變量,所以子函數(shù)會存在于內存中魔慷,而子函數(shù)依賴于父函數(shù)存在只锭,所以父函數(shù)也會存在于內存中,也就不會被垃圾回收機制回收院尔。