今天大胖問我什麼是"閉包'',我沒有回答上來編程
以前對閉包的理解一直停留在私有變量,閉了「內部」的環境的階段bash
直到看到了輪子哥的這句話:閉包
閉包不是私有,閉的意思不是「封閉內部狀態」,而是「封閉外部狀態」,當外部狀態的scope失效的時候,還有一份留在內部狀態裏面函數式編程
茅塞頓開!!!函數
而後本身試着作了一下簡單的例子ui
// 定義了一個相加函數
function basicAdd(x) {
console.log('At inner function num is: ', x);
return function(y) {return x + y;};
}
let num = 8;
// 將num做爲參數傳進去,add8的功能變被定爲了add 8的操做;
// 保留了num = 8時的狀態
const add8 = basicAdd(num);
num ++;
// 將num再次傳入,add9的功能被定爲了add 9的操做
// 保留了num = 9時的狀態
const add9 = basicAdd(num);
num ++;
console.log(`result is: ${add8(10)}`);
console.log(`result is: ${add9(10)}`);
console.log(`the finnal num is: ${num}`);
複製代碼
運行結果spa
At inner function num is: 8
At inner function num is: 9
result is: 18
result is: 19
the finnal num is: 10
複製代碼
結合以前瞭解的函數柯里化以及Javascript函數式編程code
函數的魅力實在是無窮大ip