我正在尝试编写一个小函数来调用其他函数指定的次数。
我已设法这样做,但是指定所述功能参数的最佳方法是什么?
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次,这可能吗?
答案 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
获取传递给函数调用的所有参数。
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
测试有多少数据。