gpt4 book ai didi

javascript - 套用带有无限参数的函数

转载 作者:数据小太阳 更新时间:2023-10-29 04:40:39 26 4
gpt4 key购买 nike

假设我有以下 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;
}

和下面的 curry 函数。

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] 正在被 [] 覆盖。有人可以向我提供有关如何进行这项工作的提示吗?谢谢

最佳答案

问题在于 fn 的作用域为 curryFunction,因此在 ab 之间共享。

您所要做的就是将 fn 的定义移动到匿名返回函数中。然后在您调用 f 时创建它,并且有问题的 fn.args = 行仅被调用一次。

证明:jsFiddle .

关于javascript - 套用带有无限参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20986115/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com