Pregunta

Cuando se utiliza setTimeout, usted tiene que poner el código que desea ejecutar en una cadena:

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 denomina setTimeout.)

Por supuesto, cuando el tiempo de espera activa, 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?

¿Fue útil?

Solución

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

setTimeout(myGreatFunction, 1000);

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

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

Vea la setTimeout página en el Centro de Desarrollo Mozilla para más información .

Steve

Otros consejos

¿Quién ha dicho que no le permite hacerlo?

Lo hace, el código -

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

es perfectamente válido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top