2009-12-17 13 views
20

Quiero hacer lo que setTimout hace, manualmente, sin tiempo de espera.Javascript: Función de llamada, pase matriz de argumentos, similar a la funcionalidad de setTimout()

setTimeout(function,0,args); 

Sólo tiene que llamar una función y pasarle una serie de argumentos, sin saber o preocuparse de cómo muchos argumentos estaban allí.

Básicamente quiero proxy la llamada de función a través de otra función.

Soy malo con la terminología, lo siento.

+1

Vea también: http://stackoverflow.com/questions/1881905/call-function-with-multiple-arguments – CMS

+0

@ Michał Perłakowski no estoy seguro de cómo es esto un duplicado (ya respondido) por el enlace que ha agregado ya que fue preguntado y respondido primero? Tal vez solo dices "pregunta aclarada aquí"? – somedev

+0

@somedev La otra pregunta tiene mejores respuestas, consulte [¿Debo marcar una pregunta como duplicada si ha recibido mejores respuestas?] (Https://meta.stackoverflow.com/q/251938/3853934) –

Respuesta

43
function f(a, b, c) { return a + b + c; } 
alert(f.apply(f, ['hello', ' ', 'world'])); 
0

Parece que desea una función con argumentos variables como argumento. La mejor manera de hacerlo es una matriz explícita u objeto en general.

myFunction(callbackFunction, count, arrayOfOptions); 

myFunction(callbackFunction, count, objectOfOptions); 
0

Eche un vistazo a la variable arguments de javascript. Esta es una matriz de todos los argumentos pasados ​​a la función.

Así que usted puede crear su función básica de esta manera:

f = function() { 
    for (arg in arguments) { 
     // do stuff 
    } 
} 

A continuación, cree una nueva función con los argumentos adecuados:

f2 = function() { 
    return f(arg1, arg2, arg3 /* etc. */); 
} 

y pasar esta función para setTimeout:

setTimeout(f2, 0); 
7

En ES6:

function myFunc(a, b, c){ 
    console.log(a, b, c); 
} 

var args = [1, 2, 3]; 
myFunc(...args); 
+0

gracias por esto! I <3 ES6. – hartz89

Cuestiones relacionadas