2009-04-28 9 views
12

Al utilizar setTimeout, usted tiene que poner el código que desea ejecutar en una cadena:setTimeout - cómo evitar el uso de una cadena para la devolución de llamada?

setTimeout('alert("foobar!");', 1000); 

Sin embargo, quiero ejecutar una función a la que tengo una referencia en una variable. Quiero ser capaz de hacer esto:

var myGreatFunction = function() { alert("foobar!"); }; 
// ... 
setTimeout('myGreatFunction();', 1000); 

(. Aunque en la vida real, la alerta es un poco más largo de código y myGreatFunction se pasa alrededor como un parámetro para otras funciones, dentro de los cuales se llama el setTimeout)

Por supuesto, cuando se dispara el tiempo de espera, myGreatFunction no es una función reconocida por lo que no se ejecuta.

deseo Javascript vamos a hacer esto, pero no es así:

setTimeout(function() { myGreatFunction(); }, 1000); 

¿Hay una buena manera alrededor de esto?

+4

"Al utilizar setTimeout, usted tiene que poner el código que desea ejecutar en una cadena" Usted seguramente no ... de hecho, se _should Not_. –

+0

@Tomalak - sí, tienes razón. Vea el comentario sobre la respuesta de Kirtan ...:/ – teedyay

+0

En realidad lo vi; solo quería ser explícito aquí por el bien de cualquier otra persona que pueda ver la pregunta :) –

Respuesta

28

Si no necesita llamar myGreatFunction con ningún argumento, debe ser capaz de pasar una referencia setTimeout función:

setTimeout(myGreatFunction, 1000); 

Además, se debe evitar siempre que pasa setTimeout código que se necesita para evaluar (que es lo que sucede cuando envuelve el código entre comillas). En su lugar, envolver el código en una función anónima:

setTimeout(function() { 
    // Code here... 
}, 1000); 

Véase el setTimeout page at the Mozilla Development Centre para más información.

Steve

14

¿Quién dijo que no le permite hacerlo?

Lo hace, el código -

setTimeout(function() { myFunction(); }, 1000); 

es perfectamente válido.

+9

Jaja - sí, tienes razón. Un error no relacionado significaba que parecía que mi función no se llamaba cuando realmente era. Esto me deja en la posición ligeramente vergonzosa de querer rechazar mi propia pregunta ... – teedyay

Cuestiones relacionadas