我可以编写一个使用辅助函数来完成工作的简单函数:
function calculate(a,b,fn){
return fn(a,b);
}
function sum(args){
total = 0;
for (var i=0; i<arguments.length; i++){
total += arguments[i];
}
return total;
}
console.log(calculate(15,8,sum));
现在构造它,初始函数将采用2个参数和一个函数作为其参数。 如何将其配置为接受任意数量的参数和函数?我尝试过:
function calculate(fn, args){
args = [].slice.call(arguments, 1);
return fn(args);
}
但在那种情况下,请调用:
calculate(sum, 14, 5, 1, 3);
相当于调用:
sum([14, 5, 1, 3]);
实现这个目标的正确方法是什么?
答案 0 :(得分:3)
使用Function.apply。它允许您传递一个数组,它将数组的每个成员作为被调用函数的每个参数。
function calculate(fn){
var args = [].slice.call(arguments, 1);
return fn.apply(this, args);
}
另一个例子,如果您有一个数组,并且想要找出其中的最高数字。
function max(array) {
// Math.max takes separate arguments, turn each member of the array
// into a separate argument
return Math.max.apply(Math, array);
}
或使用calculate
:
calculate(Math.max, 3, 2, 4, 7, 23, 3, 6); // 23
答案 1 :(得分:0)
我能想到的最简单的方法是将参数包装在数组或对象中,并在函数内迭代它。