2012-04-02 13 views
5

Mi chiedevo quale sia il modo per rendere questa cosa semplice (e forse stupida) con jQuery.passare una funzione come parametro e quindi eseguirla in una funzione jquery

Ho una funzione come questa:

function setSomething() { 
    make some stuff; 
} 

e poi un'altra funzione come questa:

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

Beh, se scrivo qualcosa come questo non funziona:

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

Quindi, qual è il modo di chiamare una funzione come parametro di un'altra funzione e quindi eseguirla all'interno?

Spero di essere stato abbastanza chiaro.

Qualsiasi aiuto sarà apprezzato.

Grazie in anticipo per la vostra attenzione.

risposta

11

lasciare le parentesi, è quindi possibile chiamare il parametro come funzione all'interno della funzione "generalFunction".

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 . Notando che la stessa cosa si applica al codice nella domanda che usa 'c', cioè si direbbe' c = setSomething; generalFunction (a, b, c); '(ma ovviamente come hai mostrato tu non _need_' c' per farlo funzionare). – nnnnnn

+0

Sì! Le parentesi! Pulito e semplice! : D Grazie per l'aiuto! Puoi votare la mia domanda se vuoi. – bobighorus

0

Ecco un altro esempio per coloro che vogliono passare un parametro a una funzione che viene passato come una chiamata indietro:

$(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) 
}; 

Ecco il link JSFiddle: https://fiddle.jshell.net/8npxzycm/

Problemi correlati