2012-08-06 17 views
5

Consideremos el siguiente ejemplo:JavaScript setTimeout() no esperará a ejecutar?

<script type="text/javascript"> 
    function alertBox(){ 
     alert('Hello World!'); 
    } 
    function doSomething(){ 
     setInterval(alertBox(), 5000); //This is for generic purposes only 
    }; 
    function myFunction(){ 
     setTimeout(doSomething(),3000); 
    }; 

    myFunction(); 
</script> 

Qué es lo que hace que este se ejecute INMEDIATA, en lugar de esperar establecen los 3 segundos, así como única ejecución de la descripción VEZ, en vez que en los intervalos programados de 5 segundos?

¡Gracias por cualquier ayuda que pueda proporcionar!

Mason

+4

Bueno, ** la devolución de llamada se invoca inmediatamente ** (y el resultado * * se pasa a 'setTimeout') .. pasar la Función -objeto en su lugar. –

+1

Esta es probablemente la pregunta de javascript más solicitada en SO. – jfriend00

+0

@ jfriend00 Creo que las variables cerradas en bucles podrían vincularlo ... ;-) –

Respuesta

13
alertBox() 

¿No se parece a una llamada de función inmediata?

Trate de pasar a la función (sin ejecutarlo) en su lugar:

setInterval(alertBox, 5000); 
11

es porque se está ejecutando la función, que no pasa un objeto función.

function myFunction(){ 
    setTimeout(doSomething, 3000); // no() on the function 
}; 
Cuestiones relacionadas