嚴格來講一個函數只有一個參數,將具備多個參數的函數轉換爲單參數函數鏈的方式,這就是currying。後來演變成支持不定參數的函數鏈的形式流行起來。javascript
// 在JS中能夠常見這樣調用方式 add(1)(2)(3) // 6 add() // 輸出結果 > 6 // 或者 add(1)(2)(3)() === 6 // 或者 add(1) add(2) add(3) add() === 6
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