繁体   English   中英

传递参数和回调函数

[英]passing arguments AND a callback function

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

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

完成此操作的正确方法是什么?

使用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

我想到的最简单的方法是将参数包装在数组或对象中,然后在函数内部对其进行迭代。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM