2012-08-06 8 views
5

Betrachten Sie das folgende Beispiel:JavaScript setTimeout() wartet nicht auf Execute?

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

Was ist es, diese SOFORT auszuführen verursacht, anstatt die 3 Sekunden eingestellt warten, sowie nur die Warnung ONCE Ausführung eher als in den geplanten 5-Sekunden-Intervallen?

Vielen Dank für Ihre Hilfe!

Mason

+4

Nun, ** der Rückruf wird sofort aufgerufen ** (und das * Ergebnis * auf 'setTimeout' bestanden) .. die Funktion übergeben -Objekt stattdessen. –

+1

Dies ist wahrscheinlich die am häufigsten gestellte Javascript-Frage zu SO. – jfriend00

+0

@ jfriend00 Ich denke, geschlossene Variablen in Schleifen könnte es binden .. ;-) –

Antwort

13
alertBox() 

Enthält diese wie ein sofortigen Funktionsaufruf sucht nicht?

Versuchen Sie, die Funktion übergeben (ohne es ausgeführt wird) statt:

setInterval(alertBox, 5000); 
11

sein, weil Sie die Funktion ausgeführt wird, nicht ein Funktionsobjekt übergeben.

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