2013-12-08 24 views
6

Sono impantanato su come passare correttamente i parametri a una funzione di callback senza chiamare immediatamente quella funzione.Javascript: come passare i parametri alla funzione di callback

Per esempio, questo funzionerà come previsto:

var callBack = function() { ... } 
window.setTimeout(callBack, 1000); 

Ma questo sarà accidentalmente chiamare callBack:

var callBack = function(param1, param2) { ... } 
window.setTimeout(callBack('foo','bar'), 1000); 

risposta

7

Si può chiamare come segue,

var callBack = function(param1, param2) { ... } 
window.setTimeout(function(){callBack('foo','bar');}, 1000); 
+0

Non c'è bisogno di una funzione anonima qui - solo ingombra il codice. La funzione settimeout supporta il passaggio di argomenti al suo callback - quindi perché non usarlo? – Lix

+1

@Lix in entrambi i modi sono accettabili, tuttavia passare gli argomenti al callback penso non sia supportato in ie. – melc

+0

@Lix Tuttavia sono contento che questa risposta sia stata pubblicata perché mostra una soluzione più generica che funziona quando la funzione che accetta il callback non accetta argomenti per il cb. Ora manca solo 'bind()' (per essere menzionato, non di più) :) –

8

Il modo per passare i parametri è dopo il parametro tempo come indicato in the documentation of settimeout().

var timer = window.setTimeout(func, delay, [ param1, param2, ... ] 

Il primo argomento è il callback reale, il secondo è il tempo in millisecondi e l'ultimo (opzionale) argomento è un array di parametri da passare al callback.

Quindi, per il suo esempio sarebbe qualcosa di simile:

window.setTimeout(callBack, 1000, [ "foo", "bar" ]); 

Il titolo della tua domanda è un po 'fuorviante, in quanto il metodo utilizzato per passare parametri a una funzione di callback si differenzia per l'attuazione del codice che è usandolo. Come potete immaginare, l'oggetto funzione reale ei suoi parametri non devono necessariamente essere passati insieme poiché l'esecuzione delle funzioni viene posticipata ad un momento successivo; Solo allora i parametri devono entrare in contatto con il callback.


Per una spiegazione più generica di come passare argomenti a un oggetto callback si può dare un'occhiata a questo post: JavaScript: Passing parameters to a callback function.

Problemi correlati