Die erste Version:
for (var x in set) {
...
}
deklariert eine lokale Variable namens x
. Die zweite Version:
for (x in set) {
...
}
nicht.
Wenn x
es sich bereits um eine lokale Variable handelt (dh Sie haben eine var x;
oder eine var x = ...;
frühere Variable in Ihrem aktuellen Bereich (dh die aktuelle Funktion)), sind diese gleichwertig. Wennx
es sich nicht bereits um eine lokale Variable handelt, wird bei Verwendung der zweiten implizit eine globale Variable deklariert x
. Betrachten Sie diesen Code:
var obj1 = {hey: 10, there: 15};
var obj2 = {heli: 99, copter: 10};
function loop1() {
for (x in obj1) alert(x);
}
function loop2() {
for (x in obj2) {
loop1();
alert(x);
}
}
loop2();
Sie könnte dies zu Alarm erwarten hey
, there
, heli
, hey
, there
, copter
, aber da das x
ist ein und dasselbe es alarmiert hey
, there
, there
, hey
, there
, there
. Das willst du nicht! Verwenden Sie var x
in Ihren for
Schleifen.
Um das Ganze abzurunden: Wenn sich die for
Schleife im globalen Bereich befindet (dh nicht in einer Funktion), entspricht der lokale Bereich (der Bereich x
wird bei Verwendung deklariert var x
) dem globalen Bereich (der Bereich x
wird implizit in deklariert) Wenn Sie x
ohne var) verwenden, sind die beiden Versionen identisch.
var
der der Iterator nicht deklariert wurdei
:Uncaught ReferenceError: i is not defined
. Also werde ich es von nun an verwenden: / webpack behandelt "globale" Variablen seltsam, für weitere Informationen