Ответ 1
function f(a, b, c) { return a + b + c; }
alert(f.apply(f, ['hello', ' ', 'world']));
Я хочу сделать то, что setTimout делает, вручную, без тайм-аута.
setTimeout(function,0,args);
Просто вызовите функцию и передайте ей массив аргументов, не зная и не заботясь о количестве аргументов.
В принципе, я хочу проксировать вызов функции через другую функцию.
Я плохо отношусь к терминологии, извините.
function f(a, b, c) { return a + b + c; }
alert(f.apply(f, ['hello', ' ', 'world']));
В ES6:
function myFunc(a, b, c){
console.log(a, b, c);
}
var args = [1, 2, 3];
myFunc(...args);
Похоже, вы хотите использовать функцию с переменными аргументами в качестве аргумента. Лучший способ сделать это - явный массив или объект вообще.
myFunction(callbackFunction, count, arrayOfOptions);
myFunction(callbackFunction, count, objectOfOptions);
Посмотрите на javascript arguments. Это массив всех аргументов, переданных функции.
Итак, вы можете создать свою основную функцию следующим образом:
f = function () {
for (arg in arguments) {
// do stuff
}
}
Затем создайте новую функцию с правильными аргументами:
f2 = function () {
return f(arg1, arg2, arg3 /* etc. */);
}
И передайте эту функцию в setTimeout:
setTimeout(f2, 0);