var
allein führt keine Zuweisung durch. Es kennzeichnet nur, dass, wenn Sie den Variablennamen im gesamten Bereich verwenden, in dem die var
auftritt, Sie sprechen über eine lokale Variable und nicht global (der kontroverse Standard). Die var
wird entdeckt, wenn die Funktion analysiert und hält während dieses Umfangs, also wo Sie es ausdrückte, ist irrelevant:
var a= 0;
function foo() {
a= 1;
return a;
var a;
}
var b= foo();
alert('global a='+a+', local a='+b);
Ergebnisse in global a= 0, local a= 1
: obwohl die var
Aussage ist nie im Laufe der Ausführung von foo()
erreicht, Es ist immer noch wirksam, a
eine lokale Variable zu machen.
So ein var x
ein zweites Mal im selben Umfang zu deklarieren ist völlig redundant. Sie können dies jedoch immer noch tun, in der Regel, wenn Sie einen lokalen Variablennamen für eine zweite unabhängige Verwendung innerhalb derselben Funktion erneut verwenden. Am häufigsten:
for (var i= 0; i<onething.length; i++) {
...do some trivial loop...
}
for (var i= 0; i<anotherthing.length; i++) {
...do another trivial loop...
}
Während Sie sicherlich die zweite var
und Tools wie jslint
tun Sie dies verlangen würde weglassen könnte, könnte es nicht wirklich eine gute Idee sein.
Stellen Sie sich vor, Sie ändern oder entfernen die erste Schleife, so dass sie i
nicht mehr als var
deklariert. Jetzt ändert die verbleibende zweite Schleife plötzlich die Bedeutung von einer lokalen zu einer globalen Variablen. Wenn Sie beim Aktualisieren der ersten Schleife nicht bemerken, dass die zweite Schleife eine verborgene Abhängigkeit davon hat (und Sie könnten sehr wohl nicht bemerken, dass die Augen das Muster for(...=0 ; ...<...; ...++)
in "Oh, das ist nur ein Standard-Iterator" sind), Sie haben ein subtiles und nerviges Debug-Problem.
Der Inhalt Ihrer Frage bezieht sich auf ein bestimmtes Beispiel, das im Folgenden ausreichend beantwortet wurde. Allerdings habe ich festgestellt, dass [diese Antwort] (http://stackoverflow.com/a/12889928/983430) auf eine ähnliche Frage den generischen Fall beantwortet (wann/warum würde eine JavaScript-Variable neu deklarieren verwendet werden?) Im Titel gefragt deine Frage wirklich gut. –