2017-02-06 5 views

Antwort

0

Zunächst einmal ist es nicht 5 mal drucken, aber 5 Mal jeweils in einem Intervall von 1 sec

for(var i=0; i<5 ; i++) { 
 
setTimeout(function() { 
 
console.log(i) ; }, 1000*i); 
 
}

Es geschieht, weil die Timeout-Funktion Rückrufe sind alle gut nach dem Laufen Abschluss der Schleife. In der Tat, wie Timer gehen, auch wenn es bei jeder Iteration setTimeout(.., 0) war, würden alle diese Funktionsrückrufe immer noch streng nach dem Abschluss der Schleife laufen, deshalb wurde 5 als der letzte Wert von i in der Schleife widergespiegelt. Jeder der Timer-Handler-Funktionen teilen sich die gleiche Variable "i"

Wenn Sie Wert jedes Mal trennen möchten. Sie können eine separate Funktion aufrufen darin i als Wert geben und somit wird die jeweils einen anderen Wert

function checkTimeout(i) { 
 
     setTimeout(function() { console.log(i); }, 1000*i); 
 
    } 
 
    
 
    for (var i = 1; i <= 5; ++i) { 
 
     checkTimeout(i); 
 
    }

haben
Verwandte Themen