跳到主要内容

柯里化

2024年03月12日
柏拉文
越努力,越幸运

一、认识


柯里化 (currying 当一个函数有多个参数的时候先传递一部分参数调用它(这部分参数以后永远不变),然后返回一个新的函数接收剩余参数,返回结果

总而言之: 柯里化可以让我们给一个函数传递较少的参数得到一个已经记住了某些固定参数的新函数。它是一种对函数参数的缓存。同时柯里化也使函数变得更灵活,让函数的粒度更小。从而使得函数的职责尽可能变得单一。 柯里化可以把多元函数(多个参数)转换成为一元函数(一个参数),可以组合使用使函数产生更强大的功能。

二、实现


实现

function curry(func, ...outArgs) {
const formalParameterLength = func.length;
return function (...innerArgs) {
innerArgs = outArgs.concat(innerArgs);
if (innerArgs.length < formalParameterLength) {
return curry(func, ...innerArgs);
} else {
return func.apply(this, innerArgs);
}
};
}

测试

function add(a, b, c) {
return a + b + c;
}

const curryAdd = curry(add);
console.log(curryAdd(1)(2, 3));
console.log(curryAdd(1, 2)(3));
console.log(curryAdd(1, 2, 3));