传递参数和回调函数

时间:2015-06-16 13:57:06

标签: javascript

我可以编写一个使用辅助函数来完成工作的简单函数:

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]);

实现这个目标的正确方法是什么?

2 个答案:

答案 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)

我能想到的最简单的方法是将参数包装在数组或对象中,并在函数内迭代它。