1

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

我已经设法做到了,但是指定所述函数的参数的最佳方法是什么?

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次,这可能吗?

4

2 回答 2

1

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

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

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

阅读 call 的文档并申请:

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

于 2013-04-01T08:18:53.483 回答
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.

于 2013-04-01T07:17:43.380 回答