Mit Funktionen arbeiten, die unbegrenzt Argumente annehmen

Nehmen wir an, ich habe die folgende Add-Funktion, die eine unbegrenzte Anzahl von Argumenten akzeptiert.

function add () {
    var total = 0;
    var args = Array.prototype.slice.call(arguments, 0);
    for (var i=0; i<args.length; i++) {
        total += arguments[i];
    }
    return total;
}

und die folgende Curry-Funktion.

function curryFunction(orig_func) {
    var ap = Array.prototype;
    var args = arguments;
    function fn() {
        if (arguments.length != 0) {
            ap.push.apply(fn.args, arguments);
            return fn;
        } else {
            return orig_func.apply(this, fn.args);
        }
    };
    return function() {
        fn.args = ap.slice.call( args, 1 );
        return fn.apply( this, arguments );
    };
}

Ich möchte dann etwas machen wie:

var f = curryFunction(add);
var a = f(3)(4)(3);
var b = f(10)(3);
var result1 = a(); // returns 10
var result2 = b(); // returns 13 

Jedoch bekomme ich immer 13 für a () und b (), von denen ich annehme, dass es in der Linie liegt

fn.args = ap.slice.call(args, 1);

Das vorhandene Array [3,4,3] wird mit [] überschrieben. Kann mir bitte jemand einen Hinweis geben, wie das funktioniert? Vielen Dank

Antworten auf die Frage(2)

Ihre Antwort auf die Frage