2012-04-02 22 views
5

Me preguntaba cuál es la forma de hacer que esto simple (y tal vez estúpido) con jQuery.pasar una función como un parámetro y luego ejecutarlo en una función jquery

que tienen una función como esta:

function setSomething() { 
    make some stuff; 
} 

y luego otra función como esta:

generalFunction(par1, par2, par3) { 
    do other stuff; 
    execute function called in par3;  
} 

Bueno, si escribo algo como esto no funciona:

c=setSomething(); 
generalFunction(a, b, c); 

Entonces, ¿cuál es la manera de llamar a una función como parámetro de otra función y luego ejecutarla dentro?

Espero haber sido lo suficientemente claro.

Cualquier ayuda será apreciada.

Gracias de antemano por su atención.

Respuesta

11

dejar fuera el paréntesis, a continuación, puede llamar al parámetro como una función dentro de la función "función general".

setSomething(){ 
    // do other stuff 
} 

generalFunction(par1, par2, par3) { 
    // do stuff... 

    // you can call the argument as if it where a function (because it is !) 
    par3(); 
} 

generalFunction(a, b, setSomething); 
+2

1 . Observando que lo mismo se aplica al código en la pregunta que usa 'c', es decir, usted diría' c = setSomething; generalFunction (a, b, c); '(pero, por supuesto, como has demostrado, no necesitas _necesitar' c' para que funcione). – nnnnnn

+0

¡Sí! ¡Los paréntesis! Limpio y simple! : D ¡Gracias por la ayuda! Puedes votar por mi pregunta si quieres. – bobighorus

0

Aquí hay otro ejemplo para aquellos que quieran pasar un parámetro a una función que se pasa como una llamada de vuelta:

$(document).ready(function() { 
    main(); 
}); 

function main() { 
    alert('This is the main function'); 
    firstCallBack(1, 2, 3, secondCallBack); 
}; 

function firstCallBack(first, second, third, fourth) { 
    alert('1st call back.'); 
    var dataToPass = first + ' | ' + second; 
    fourth(dataToPass); 
}; 

function secondCallBack(data) { 
    alert('2nd call back - Here is the data: ' + data) 
}; 

Aquí está el enlace jsFiddle: https://fiddle.jshell.net/8npxzycm/

Cuestiones relacionadas