function add (...args) {
return args.reduce((pre,cur) => pre + cur)
}
function add_fixed_numbers (a, b, c) {
return a + b + c
}
// 固定参数
function currying_fixed_arguments (func, ...args) {
return func.length <= args.length ?
func.call(null, ...args) : currying.bind(null, func, ...args)
}
// 不固定参数
// addCur(1)(2)() = 3
function currying_not_fixed_arguments (func) {
const args = []
return function inner(...argsInner) {
if (argsInner.length) {
args.push(...argsInner)
return inner
} else {
const ret = func.apply(null, args)
args.length = 0
return ret
}
}
}
const addCurried = currying_not_fixed_arguments(add)
console.log(addCurried(1)(2,3,4)())
console