筆記:閉包

阿賀呀發表於2019-02-21

關於閉包的一些思考

今天大胖問我什麼是"閉包'',我沒有回答上來

之前對閉包的理解一直停留在私有變數,閉了“內部”的環境的階段

直到看到了輪子哥的這句話:

閉包不是私有,閉的意思不是“封閉內部狀態”,而是“封閉外部狀態”,當外部狀態的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函數語言程式設計

函式的魅力實在是無窮大

相關文章