JavaScript中的函数柯里化(currying)

110 阅读1分钟

什么是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;
}

柯里化的用处

  1. 延迟计算
  2. 参数复用
  3. 动态生成函数
  4. 将普通函数柯里化的函数
// 柯里化函数
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