什么是JavaScript中的柯里化(currying)
在JavaScript中,柯里化(Currying)是一种函数式编程技术,它允许你将一个多参数函数转化为一系列嵌套的单参数函数。当你对一个函数应用柯里化后,每次调用都可以传入一个参数,而不需要一次性传入所有参数。未传入的参数会被延迟处理,直到所有必需的参数都被提供为止。
主要特点
柯里化的主要优点在于它可以提高代码的复用性和灵活性。它允许你创建部分应用的函数,这些函数已经预设了某些参数,而其余参数可以在稍后的时间点再提供。
简单例子
下面求两个值的和
function curryAdd(a) { return function(b) { return a + b; }; } // 使用柯里化 const add5 = curryAdd(5); console.log(add5(10)); // 输出 15 // 直接调用 console.log(curryAdd(5)(10)); // 输出 15
function addThreeNum (a, b, c) {
return a + b + c;
}
柯里化的用处
- 延迟计算
- 参数复用
- 动态生成函数
- 将普通函数柯里化的函数
// 柯里化函数
const curry = function (fn) {
return function nest(...args) {
// fn.length表示函数的形参个数
if (args.length === fn.length) {
// 当参数接收的数量达到了函数fn的形参个数,即所有参数已经都接收完毕则进行最终的调用
return fn(...args);
} else {
// 参数还未完全接收完毕,递归返回judge,将新的参数传入
return function (arg) {
return nest(...args, arg);
}
}
}
}
function addNum(a, b, c) {
return a + b + c;
}
const addCurry = curry(addNum);
addCurry(1)(2)(3);// 6