假设我有以下 add 函数,它接受无限数量的参数。
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;
}
以及下面的柯里函数。
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 );
};
}
然后我想做类似的事情:
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
然而,我认为 a() 和 b() 总是得到 13 是因为在线
fn.args = ap.slice.call(args, 1);
现有数组 [3,4,3] 被 [] 覆盖。有人可以向我提供有关如何进行这项工作的提示吗?谢谢