柯里化和组合在 JavaScript 函数式编程中的作用
- 柯里化(Currying)
- 作用:柯里化是一种将多参数函数转换为一系列单参数函数的技术。它可以延迟函数的执行,直到所有参数都被提供。这使得代码更加灵活,便于复用部分应用的函数。例如,对于一个
add(a, b)
函数,柯里化后可以先提供 a
,得到一个新函数,再提供 b
才执行加法操作。这样可以创建一些特定功能的函数,比如 add5 = add(5)
,add5
就是一个只接受一个参数并和 5 相加的函数。柯里化有助于提高函数的可复用性和代码的简洁性,同时也符合函数式编程中单一职责原则,每个函数只负责一件事情。
- 组合(Composition)
- 作用:组合是将多个函数组合成一个新函数的过程。它通过将前一个函数的输出作为后一个函数的输入,将多个简单函数组合成一个更复杂的功能。组合使得代码更加模块化,易于维护和理解。例如,有
f(x)
和 g(x)
两个函数,组合后 compose(f, g)(x)
就相当于 f(g(x))
,将 g
对 x
的处理结果作为 f
的输入,实现更强大的功能。组合也符合函数式编程中避免副作用和保持数据不可变的原则。
代码实现
// 柯里化函数curryAdd
function curryAdd() {
const args = Array.from(arguments);
const innerAdd = function() {
args.push(...arguments);
return innerAdd;
};
innerAdd.toString = function() {
return args.reduce((acc, val) => acc + val, 0);
};
return innerAdd;
}
// 利用柯里化和组合实现add5AndMultiplyBy3函数
function add5AndMultiplyBy3(num) {
const add5 = curryAdd(5);
const multiplyBy3 = function(x) {
return x * 3;
};
return multiplyBy3(add5(num));
}