函数柯里化(Currying)是一种将接受多个参数的函数转化为接受一个单一参数的函数,并且返回接受剩余参数且返回结果的新函数的技术。
在JavaScript中,可以通过以下代码实现函数柯里化:
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));
}
}
};
}
这段代码定义了一个 curry
函数,它接受一个函数 fn
作为参数。curry
函数返回一个新的函数 curried
,这个函数可以接受任意数量的参数。
当 curried
函数的参数个数大于或等于 fn
函数的参数个数时,就可以调用 fn
函数,并将参数传递给它。
当 curried
函数的参数个数小于 fn
函数的参数个数时,就返回一个新的函数,这个新的函数会将之前传入的参数与当前传入的参数合并,并继续等待下一个参数的传入,直到收集到足够的参数再调用 fn
函数。
使用柯里化可以方便地创建一些常用的函数,例如:
function add(a, b, c) {
return a + b + c;
}
const 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
,这个新的函数可以接受任意数量的参数,并在收到足够的参数后调用原始的 add
函数。