¿Por qué la función se ejecuta inmediatamente cuando uso setTimeout?
Estoy intentando escribir un código simple con un setTimeout
, pero setTimeout
simplemente no espera el tiempo que se supone que debe hacerlo y el código se ejecuta de inmediato. ¿Qué estoy haciendo mal?
setTimeout(testfunction(), 2000);
Estás llamando a la función inmediatamente y programando su valor de retorno.
Usar:
setTimeout(testFunction, 2000);
^
Aviso: sin padres.
Quitar el paréntesis
setTimeout(testfunction(), 2000);
Si desea enviar parámetros a la función, puede crear una función anónima que luego llamará a la función deseada.
setTimeout(function() {
testfunction('hello');
}, 2000);
Editar
Alguien sugirió enviar una cadena como primer parámetro de setTimeout. Sugeriría no seguir esto y nunca enviar una cadena como primer parámetro setTimeout, porque se utilizará la función eval. Esta es una mala práctica y debe evitarse si es posible.
Elimine los paréntesis después del testfunction
nombre:
setTimeout(testfunction, 2000);
La razón es que el primer argumento setTimeout
debe ser una referencia de función , no el valor de retorno de la función. En su código, testfunction
se llama inmediatamente y el valor de retorno se envía a setTimeout
.