其实。。。就是函数柯里化curry,另外取值是调用valueOf,valueOf调用toString,所以改valueOf可以少一步
function curry(fn) {
    let result = 0
    const _fn = function () {
        result += fn.apply(this, arguments)
        return _fn
    }
    _fn.valueOf = function() {
        const temp = result
        result = 0
        return temp
    }
    return _fn
}
function add() {
    return Array.prototype.reduce.call(arguments, function(p, v) {
        return p + v
    }, 0)
}
add = curry(add)
add(2,3,4)(2)(3) === 14

这个是不定参数的,最后结果是数字,这个还有很多变种。。。参数固定的话可以把result改成数组,每次调用就push进去,最后取值时全部塞到被curry的函数里。具体实现有很多。可以一一尝试