柯里化:
在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加 里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
Currying概念其实很简单,只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。
以加法函数为例:
function add(a, b) {
return a + b;
}
function curry(fn, a) {
return function(b) {
return fn(a, b);
}
}
curry(add, 10)(1); // 11
传入三个参数呢?
function curry(fn, a) {
return function(b) {
return function(c) {
return fn(a, b, c);
}
}
}
不难发现,递归方法能实现多个参数,由此实现函数柯里化
function curry(fn, ...args) {
return function(...innerArgs) {
const allArgs = [...args, ...innerArgs];
if (fn.length <= allArgs.length) {
// 说明已经接受完所有参数,这个时候可以执行了
return fn.apply(this, allArgs);
} else {
// 继续返回函数,收集参数
return curry(fn, ...allArgs);
}
}
}