看下面一個例子:
function zipCode(code, location) {let _code = code;let _location = location || '';return {code: function () {return _code;},location: function() {return _location;}}
}
再上述封閉的函數中,code的匿名函數根據作用域鏈可以訪問到外面的_code變量.
const princetoZip = zipCode('08544', '3345');
console.log(princetoZip.code());
從上面的例子可以抽出閉包的定義.
閉包: 是一種能夠在函數聲明過程中將環境信息與所屬函數綁定在一起的數據結構.
閉包的作用域,其實就是一種靜態作用域或詞法作用域,下面給出詞法作用域的定義:
詞法作用域(靜態作用域): 其執行環環境是基于 函數聲明的位置的.
閉包的作用: 由于閉包的作用域是靜態的,故通過閉包寫的代碼清晰可讀,因此可以廣泛的應用于函數式編程的高級函數中,除此之外還可用于事件處理和回調、模擬私有變量等.
參考《JavaScript函數式編程指南》P41