在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。
举个例子:
sum(1, 2, 3) //6
sum(1)(2, 3) //6
sum(1, 2)(3) //6
sum(1)(2)(3)//6
这里实现的要点在于,如果后续不继续以函数形式调用,则会直接返回结果,若以函数形式调用,则每次函数调用返回的结果是一个函数。
实现:
function add() {
const _args = Array.prototype.slice.call(arguments);
const _adder = function() {
_args.push(...arguments);
return _adder;
}
_adder.toString = function() {
return _args.reduce((prev, curr) => prev + curr);
}
return _adder;
}
我们可以借助函数的toString方法,如果直接返回不调用则会触发toString,进而自动计算历史所有参数的总和。