函数柯里化的定义柯里化(Currying)是一种处理多元函数的方法。它产生一系列连锁函数,其中每个函数固定部分参数,并返回一个新函数,用于传回其它剩余参数的功能。
//这里我们先通过一个简单的代码,来演示一下,让函数可以多次传参
function add(a) {
return function (b) {
return a + b;
};
}
add(1)(2);
这里我们直接看一道面试题,并通过这个题目写一个通用的柯里化函数
题目实现add方法
add(1)(2)(3) = 6;
add(1, 2, 3)(4) = 10;
add(1)(2)(3)(4)(5) = 15;
function add() {
let args = [...arguments]; //用于存放所有的参数,并获取第一次执行的参数
//获取后续执行函数的参数
function _add() {
args.push(...arguments);
return _add;
}
//执行end方法,代表参数已经全部获取
_add.end = () => {
return args.reduce((a, b) => a + b);
};
return _add;
}
let res = add(1, 2)(1)(3).end();
通过通用的柯里化函数实现
//柯里化函数
function curry() {
let fun = arguments[0]; //拿到要运行的函数
let args = Array.prototype.slice.call(arguments, 1); //获取传递的参数
function _curry() {
args.push(...arguments);
return _curry;
}
_curry.end = function () {
return add.apply(null, args);
};
return _curry;
}
function add() {
return Array.prototype.reduce.call(arguments, (a, b) => a + b);
}
let res = curry(add, 1, 2)(3, 4, 5).end();