筆記:閉包

關於閉包的一些思考

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

以前對閉包的理解一直停留在私有變量,閉了「內部」的環境的階段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

相關文章
相關標籤/搜索