2016-08-09 15 views
2

Javascript diesen Code sofort jedoch ausgeführt wird, muss ich es 2 Millisekunden warten, bevor sie ausgeführt wird, wie in setTimeout(doIt(i),2000);SetTimeout sofort Ausführung

scripted Warum?

<script type="text/javascript"> 
    var colors= ["red","pink","green"]; 
    function doIt(i){ 
     i++ 
     console.log(i); 
     console.log("didIt"); 
     $('body').append("<style>body{background:"+i+";}</style>"); 
     if(i==2){ 
     } 
     else{ 
      test(i); 
     } 

    } 

    function test(i){ 
     setTimeout(doIt(i),2000); 
    } 
    test(0); 
</script> 
+0

'setTimeout' erstes Argument ist eine Referenz zu einer Funktion – zerkms

+0

Differenz e zwischen einem Funktionsausdruck und einem Funktionsaufruf: die Klammern. Einer ist eine Funktion, der andere ist ein Wert, der von der Funktion zurückgegeben wird. –

+0

Tutorial hier: http://www.jquerybyexample.net/2014/11/javascript-settimeout-executes-function-immediately.html – Jaime

Antwort

4

Dies ist der häufigste Fehler. Ändern Sie den Code dazu:

function test(i){ 
    setTimeout(function() { 
     doIt(i); 
    }, 2000); 
} 

Sie direkt die doIt Methode aufgerufen wurden, anstatt vorbei nur den Verweis auf die setTimeout Rückruf von (i) nach doIt zu schreiben.

Eine weitere Möglichkeit, direkt von Schreiben der bind() Methode:

function test(i) { 
    setTimeout(doIt.bind(null, i), 2000); 
} 

Alles hier gegeben hat:

  1. How can I pass a parameter to a setTimeout() callback?
  2. Calling functions with setTimeout()
Verwandte Themen