柯里化(Currying)是一种在计算机科学和函数式编程中常见的技术,它指的是将一个使用多个参数的函数转换成一系列使用一个参数的函数。
以下是一个简单的柯里化函数的实现,它接受一个函数和该函数的参数长度,然后返回一个新的函数,这个新函数会依次接受参数,并在所有参数都提供后执行原函数:
function curry(fn, length) {length = length || fn.length; // 需要柯里化的函数参数的数量return function () {if (arguments.length < length) { var combined = [fn].concat(Array.prototype.slice.call(arguments));return curry(curry.apply(this, combined), length - arguments.length);} else {return fn.apply(this, arguments);}};
}
你可以这样使用它:
function sum(a, b, c) {return a + b + c;
}var curriedSum = curry(sum);console.log(curriedSum(1)(2)(3)); // 输出 6
在这个例子中,curry
函数接受sum
函数作为参数,并返回一个新的函数curriedSum
。这个新函数可以分步骤地接受参数,并在所有参数都被提供后执行原函数。所以curriedSum(1)(2)(3)
相当于sum(1, 2, 3)
,都输出6
。