關於閉包的一些思考
今天大胖問我什麼是"閉包'',我沒有回答上來
之前對閉包的理解一直停留在私有變數,閉了“內部”的環境的階段
直到看到了輪子哥的這句話:
閉包不是私有,閉的意思不是“封閉內部狀態”,而是“封閉外部狀態”,當外部狀態的scope失效的時候,還有一份留在內部狀態裡面
茅塞頓開!!!
然後自己試著做了一下簡單的例子
// 定義了一個相加函式
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}`);
複製程式碼
執行結果
At inner function num is: 8
At inner function num is: 9
result is: 18
result is: 19
the finnal num is: 10
複製程式碼
結合之前瞭解的函式柯里化以及Javascript函數語言程式設計
函式的魅力實在是無窮大