Ich kenne den Unterschied zwischen Let und Var. let blockiert den Gültigkeitsbereich und var ist der Funktionsumfang.Unterschied zwischen let und var inside setTimeout?
for(var i=0; i< 3; i++){
setTimeout(function(){
console.log(i);
}, 10);
}
output : 3
3
3
Ich weiß, wie Schnipsel über Code funktioniert (console.log(i)
zu diesem Zeitpunkt ausgeführt wird, wenn der Wert von i 3 ist, weil Umfang von i global ist).
Aber
for(let i=0; i< 3; i++){
setTimeout(function(){
console.log(i);
}, 10);
}
output : 1
2
3
das Snippet oben Code verwirrend mich. nach mir sollte es Reference Error werfen (weil die Zeit, wenn console.log(i)
ausgeführt wird, wird der Wert von i im globalen Bereich nicht im lokalen Bereich aussehen, und ich bin nicht deklarieren/definiert in globalen. so sollte es Referenzfehler geben.)
Wer kann erklären, wie 2nd for loop auf Runtime funktioniert?
Abschluss schließt die neue Instanz von i für jede Iteration bei Verwendung von Let. – Blindman67
Wenn ein 'Reference Error' ausgelöst würde, würde keine Art von Closure funktionieren. Weder die für den Funktionsumfang 'var', noch die für den' let'. –
Gehen Sie und lesen Sie diese [Artikel] (http://www.acreatelygood.com/JavaScript-Scoping-and-Hoisting.html), wenn Sie Zeit haben. Es erklärt Scoping, Hissen usw. sehr gut. – Fahmi