2012-08-06 21 views
5

consideri il seguente esempio:JavaScript setTimeout() non aspetterà di eseguire?

<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> 

Cos'è che causa questo per eseguire IMMEDIATAMENTE, piuttosto che aspettare i 3 secondi impostati, così come solo eseguendo l'avviso UNA VOLTA, piuttosto rispetto agli intervalli programmati di 5 secondi?

Grazie per l'aiuto che puoi fornire!

Mason

+4

Beh, ** la richiamata viene richiamato immediatamente ** (e il risultato * * è passato a 'setTimeout') .. passare la funzione -object invece. –

+1

Questa è probabilmente la domanda javascript più richiesta su SO. – jfriend00

+0

@ jfriend00 Penso che le variabili chiuse in loop potrebbero legarlo .. ;-) –

risposta

13
alertBox() 

non Ti sembra una chiamata di funzione immediata?

Prova a passare la funzione (senza eseguirlo) invece:

setInterval(alertBox, 5000); 
11

è perché si sta eseguendo la funzione, non passando un oggetto funzione.

function myFunction(){ 
    setTimeout(doSomething, 3000); // no() on the function 
}; 
Problemi correlati