柯里化

100 阅读1分钟

在计算机科学中,柯里化(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,进而自动计算历史所有参数的总和。