setTimeout - cómo evitar el uso de cuerdas para devolución de llamada?
-
18-09-2019 - |
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?
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.