SOURCE

// 最终版本
function multi() {
    const args = Array.prototype.slice.call(arguments)
    const fn = function(){
        const newArgs = args.concat(Array.prototype.slice.call(arguments))
        return multi.apply(this, newArgs)
    }
    fn.toString = function() {
        return args.reduce((a, b) => a * b)
    }
    return fn
}
console.log(multi(2, 3, 4))
console.log(multi(3)(4)(5))


// 固定参数版本
// function curry(fn, args) {
//     var length = fn.length;

//     args = args || [];

//     return function() {

//         var _args = args.slice(0),

//             arg, i;

//         for (i = 0; i < arguments.length; i++) {

//             arg = arguments[i];

//             _args.push(arg);

//         }
//         if (_args.length < length) {
//             return curry.call(this, fn, _args);
//         }
//         else {
//             return fn.apply(this, _args);
//         }
//     }
// }


// var fn = curry(function(a, b, c) {
//     console.log([a, b, c]);
// });

// fn("a", "b", "c") // ["a", "b", "c"]
// fn("a", "b")("c") // ["a", "b", "c"]
// fn("a")("b")("c") // ["a", "b", "c"]
// fn("a")("b", "c") // ["a", "b", "c"]


console 命令行工具 X clear

                    
>
console