¿Por qué la función se ejecuta inmediatamente cuando uso setTimeout?

Resuelto Adler asked hace 13 años • 8 respuestas

Estoy intentando escribir un código simple con un setTimeout, pero setTimeoutsimplemente 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);
Adler avatar Aug 21 '11 16:08 Adler
Aceptado

Estás llamando a la función inmediatamente y programando su valor de retorno.

Usar:

setTimeout(testFunction, 2000);
                       ^

Aviso: sin padres.

Mat avatar Aug 21 '2011 09:08 Mat

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.

Jose Faeti avatar Aug 21 '2011 09:08 Jose Faeti

Elimine los paréntesis después del testfunctionnombre:

setTimeout(testfunction, 2000);

La razón es que el primer argumento setTimeoutdebe ser una referencia de función , no el valor de retorno de la función. En su código, testfunctionse llama inmediatamente y el valor de retorno se envía a setTimeout.

Emil Vikström avatar Aug 21 '2011 09:08 Emil Vikström