JS:动态多次调用函数

时间:2013-04-01 07:14:53

标签: javascript function

我正在尝试编写一个小函数来调用其他函数指定的次数。

我已设法这样做,但是指定所述功能参数的最佳方法是什么?

var doTimes = function (times, fn, params) {
    for (i=0; i<times; i++) {
        fn(params);
    }
}

实际上,我只能得到一个参数,例如:

doTimes( 3, fn, param );

与写作相同:

fn(param); fn(param); fn(param);

但是,如果我想去

fn(param1,param2,param3);

没有写3次,这可能吗?

2 个答案:

答案 0 :(得分:1)

一个非常有用和强大的方法是在javascript中使用.apply()方法来处理函数。 .apply()方法允许您传递一个数组,该数组将重新排列为多个参数。所以基本上你可以这样做:

function doTimes (times, fn, paramsArray) {
    for (i=0; i<times; i++) {
        fn.apply(null,paramsArray);
    }
}

注意:null参数指定this关键字在被调用函数中指向的内容。如果不重要,请将其设置为任何内容(在这种情况下为null)。如果重要,请将其设置为this应引用的对象。

阅读电话和申请文件:

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/apply https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/call

答案 1 :(得分:0)

您可以使用arguments获取传递给函数调用的所有参数。

jsFiddle

var doTimes = function (times, fn) {
    for (i=0; i<times; i++) {
        fn(arguments[2], arguments[3], arguments[4]);
    }
}

function test(a, b, c) {
    alert(a + '\n' + b + '\n' + c);
}

doTimes(2, test, 1, 2, 3);

请注意,arguments只是一个数组,因此您可以使用arguments.length测试有多少数据。