函数柯里化是一种将接受多个参数的函数转换成一系列接受单个参数的函数的技术。在JavaScript中,可以通过以下方式实现函数柯里化:
function curry(func) {
return function curried(...args) {
if (args.length >= func.length) {
return func.apply(this, args);
} else {
return function (...moreArgs) {
return curried.apply(this, args.concat(moreArgs));
};
}
};
}
这里的 curry 函数接受一个函数 func 作为参数,并返回一个柯里化的版本。柯里化的函数 curried 判断当前传入的参数个数是否大于等于原始函数 func 的参数个数,如果是则直接调用 func,否则返回一个新的函数继续接收参数,直到达到要求为止。
你可以这样使用这个 curry 函数:
function add(a, b, c) {
return a + b + c;
}
let curriedAdd = curry(add);
console.log(curriedAdd(1)(2)(3)); // 输出 6
console.log(curriedAdd(1, 2)(3)); // 输出 6
console.log(curriedAdd(1)(2, 3)); // 输出 6
console.log(curriedAdd(1, 2, 3)); // 输出 6
这样就实现了函数 add 的柯里化版本 curriedAdd,可以接受不同数量的参数进行调用。