Gültigkeitsbereich von Variablen in JavaScript: var, let, const und Funktionen
Hallo zusammen! Ich habe gerade angefangen, JavaScript zu lernen, und komme mit dem Gültigkeitsbereich von Variablen nicht klar. Ich schreibe einfachen Code, aber die Ergebnisse überraschen mich ständig.
Hier ist ein Beispiel:
```javascript
var x = 10;
function test() {
var x = 20;
if (true) {
var x = 30;
console.log(x); // gibt 30 aus
}
console.log(x); // gibt 30 aus, nicht 20!
}
test();
console.log(x); // gibt 10 aus
```
Warum ändert sich die Variable `x` innerhalb der Funktion `test()`, obwohl ich sie mit `var` innerhalb des `if`-Blocks deklariert habe? Ich dachte, `var` sei auf die Funktion beschränkt, aber hier verhält es sich seltsam. Ich habe auch von `let` und `const` gehört, verstehe aber nicht, wie sie sich unterscheiden.
Ein weiteres Beispiel mit Closures:
```javascript
for (var i = 0; i < 3; i++) {
setTimeout(function() {
console.log(i); // gibt 3, 3, 3 aus
}, 100);
}
```
Warum zeigen alle drei Aufrufe 3 an, und nicht 0, 1, 2? Ich hatte erwartet, dass jeder setTimeout-Aufruf seinen eigenen Wert von i speichert. Bitte erklärt, wie das funktioniert.