主题
柯里化
创建一个函数,该函数接收 func 的参数,要么调用 func 返回的结果,如果 func 所需参数已经提供,则直接返回 func 所执行的结果。或返回一个函数,接受余下的 func 参数的函数,可以使用 func.length 强制需要累积的参数个数。
js
function curry(fn, ...args) {
return function (...args2) {
const allArgs = args.concat(args2)
if (allArgs.length >= fn.length) {
return fn.apply(this, allArgs)
} else {
return curry(fn, ...allArgs)
}
}
}js
function curry(fn) {
return function curried(...args) {
if (args.length >= fn.length) {
return fn.apply(this, args)
} else {
return function (...args2) {
return curried.apply(this, args.concat(args2))
}
}
}
}示例
js
const sum = (a, b, c, d) => a + b + c + d
console.log(curry(sum)(1)(2)(3)(4)) // 输出 10
console.log(curry(sum)(1, 2)(3, 4)) // 输出 10
console.log(curry(sum)(1, 2, 3)(4)) // 输出 10
console.log(curry(sum)(1, 2, 3, 4)) // 输出 10