2017-03-03 6 views
-3

Ich bin ein Javascript Lerner Hear ist mein JavascriptJavascript setTimeout() nicht funktioniert

Ich habe eine Javascript-Funktion get(); genannt, die ich nennen es onload.

function get() { 
 
    for (var i = 1; i <= 5; i++) { 
 
    setTimeout(function() { 
 
     console.log('Value of i : ' + i); 
 
    }, 100); 
 
    } 
 
}
<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <meta charset="ISO-8859-1"> 
 
</head> 
 

 
<body onload="get();"> 
 
</body> 
 

 
</html>

Die erwartete Ausgabe ist

Value of i : 1 
Value of i : 2 
Value of i : 3 
Value of i : 4 
Value of i : 5 

wo, wie ich bin immer

Value of i : 6 

Nicht in der Lage, herauszufinden, was genau ist, ist falsch.

+0

es ist kein Duplikat, solange Sie nicht wissen, wonach Sie suchen. Für den erfahrenen JavaScript-Entwickler ist das ein Duplikat, ja, aber nicht für den Neuling. –

+0

@KishanCS Sie können nicht. Es gibt Antwort auf diesen Beitrag. Dies ist einer der Hauptgründe, warum das Beantworten eines Betrogenen als schlecht angesehen wird. Dies wird als redundanter Beitrag dienen. – Rajesh

+1

Jungs haben etwas Gnade auf down votes .. –

Antwort

1

Sie können let verwenden, das seinen eigenen Bereich hat, oder Sie können dort einen closure erstellen.

Mit

<!DOCTYPE html> 
 
<html> 
 
<head> 
 
<meta charset="ISO-8859-1"> 
 
</head> 
 
<script> 
 
    function get() { 
 
     for (let i = 1; i <= 5; i++) { 
 
      setTimeout(function() { 
 
       console.log('Value of i : ' + i); 
 
      }, 100); 
 
     } 
 
    } 
 
</script> 
 
<body onload="get();"> 
 
</body> 
 
</html>

Closure Snippet

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <meta charset="ISO-8859-1"> 
 
</head> 
 
<script> 
 
    function get() { 
 
    for (let i = 1; i <= 5; i++) { 
 
     setTimeout(((function(i) { 
 
     return function() { 
 
      console.log('Value of i : ' + i); 
 
     } 
 
     })(i)), 100); 
 
    } 
 
    } 
 
</script> 
 

 
<body onload="get();"> 
 
</body> 
 

 
</html>

+0

das funktioniert für (let i = 1; i <= 5; i ++) // Gebrauch von lassen Sie erklären –

+1

es ist kein Duplikat, da die Person, die die Frage stellte, mit dem Konzept von clusures nicht vertraut ist und deshalb einen Fehler in der setTimeout-Funktion vermutet. –

+1

@TobiasGassmann es geht nicht um Vertrautheit. Ein Duplikat wird berücksichtigt, wenn die Frage einem anderen Post ähnelt und die Lösung in diesem Beitrag das Problem lösen würde. – Rajesh

3

Der richtige Ansatz lassen, dies zu tun ist:

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="ISO-8859-1"> 
</head> 
<script> 
    function get() { 
     for (var i = 1; i <= 5; i++) { 
      setTimeout(function(x) { 
       console.log('Value of i : ' + x); 
      }(i), 100); 
     } 
    } 
</script> 
<body onload="get();"> 
</body> 
</html> 

Beachten Sie die (i) in:

setTimeout(function(x) { 
     console.log('Value of i : ' + x); 
    }(i), 100); 
} 

dies, wie Sie Werte in eine setTimeout-Funktion übergeben.