柯里化理解與JS實現

什麼是柯里化

嚴格來講一個函數只有一個參數,將具備多個參數的函數轉換爲單參數函數鏈的方式,這就是currying。後來演變成支持不定參數的函數鏈的形式流行起來。javascript

// 在JS中能夠常見這樣調用方式
add(1)(2)(3) // 6
add() // 輸出結果
> 6
// 或者
add(1)(2)(3)() === 6
// 或者
add(1)
add(2)
add(3)
add() === 6

柯里化的做用

  1. 閉包
  2. 延遲執行
  3. 參數複用

JS中實現柯里化

這是個柯里化的裝飾器

function Currying(fn) {
  let args = [].slice.call(arguments,1);
  function g() {
    if(arguments.length > 0){
      args.push.apply(args, arguments)
      return g
    } else {
      return fn.apply(fn, args)
    }
  }
  return g
}

作個測試

// 定義一個求和函數
function add() {
  let count = 0
  if(arguments.length > 0) {
    for(let i = 0; i < arguments.length; i++){
      count += arguments[i]
    }
  }
  return count
}
// 測試
const _add = Currying(add)
  _add(1)
  _add(2)
  _add(3)()
// > 6
相關文章
相關標籤/搜索