Curry

在函數式編程中,Curry指的是將一個具有多個參數的函數轉換成一系列每個有一個參數的函數的過程。這允許函數以逐步的方式調用,增強了靈活性和可重用性。在JavaScript中,currying通常通過如上所示的curry函數實現,該函數檢查提供的參數數量,然後要麼調用原始函數,要麼返回另一個函數來收集更多參數,直到滿足所有參數。這種技術在預配置帶有某些參數的函數時特別有用,有助於編寫更清晰、更模組化的代碼。


const join = (a, b, c) => {
   return `${a}_${b}_${c}`
}
const curriedJoin = curry(join)
curriedJoin(1, 2, 3) // '1_2_3'
curriedJoin(1)(2, 3) // '1_2_3'
curriedJoin(1, 2)(3) // '1_2_3'

反覆將變數儲存 直到參數數量相等
fn.length 代表傳入的 function 有幾個參數
func.call(thisArg[, arg1[, arg2[, ...]]]) 將參數一個一個帶
func.apply(thisArg, [argsArray]) 將參數用一個 array 帶

function curry(fn) {
  return function curried(...args) {
    if (args.length >= fn.length) {
      return fn.apply(this, args)
    } 
    return function(...args2) {
      return curried.apply(this, args.concat(args2))
    }
  }
}

Last updated