Die erste Version:
for (var x in set) {
...
}
deklariert eine lokale Variable namens x. Die zweite Version:
for (x in set) {
...
}
nicht.
Wenn xes 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 xist ein und dasselbe es alarmiert hey, there, there, hey, there, there. Das willst du nicht! Verwenden Sie var xin Ihren forSchleifen.
Um das Ganze abzurunden: Wenn sich die forSchleife im globalen Bereich befindet (dh nicht in einer Funktion), entspricht der lokale Bereich (der Bereich xwird bei Verwendung deklariert var x) dem globalen Bereich (der Bereich xwird implizit in deklariert) Wenn Sie xohne var) verwenden, sind die beiden Versionen identisch.
varder 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