定长参数的函数柯里化
function curry(fn) {
return function curried(...args) {
if (args.length >= fn.length) {
return fn.apply(this, args)
} else {
return function (...moreAgrs) {
return curried.apply(this, [...args, ...moreAgrs])
}
}
}
}
function sum(a, b, c) {
return a + b + c
}
let sumCurried = curry(sum)
console.log(sumCurried(1)(1)(1));
console.log(sumCurried(1, 1)(1));
console.log(sumCurried(1)(1, 1));
console.log(sumCurried(1, 1, 1));
不定长参数的函数柯里化
function curry(fn) {
let argsArr = []
return function curried(...args) {
if (args.length) {
argsArr = [...argsArr, ...args]
return curried
} else {
let res = fn(...argsArr)
argsArr = []
return res
}
}
}
function sum(...args) {
return args.reduce((prev, cur) => prev + cur, 0)
}
let sumCurried = curry(sum)
console.log(sumCurried(1)(1)(1)());
console.log(sumCurried(1, 1)(1)());
console.log(sumCurried(1)(1, 1)());
console.log(sumCurried(1, 1, 1)());