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