Es gibt absolut keinen Unterschied in der Bedeutung oder Leistung in JavaScript oder ActionScript.
var
ist eine Direktive für den Parser und kein zur Laufzeit ausgeführter Befehl. Wenn ein bestimmter Bezeichner var
an einer beliebigen Stelle in einem Funktionskörper (*) einmal oder mehrmals deklariert wurde , bezieht sich jede Verwendung dieses Bezeichners im Block auf die lokale Variable. Es spielt keine Rolle, ob innerhalb der Schleife, außerhalb der Schleife oder beides value
deklariert ist var
.
Folglich sollten Sie schreiben, was Sie am besten lesbar finden. Ich bin mit Crockford nicht einverstanden, dass es immer das Beste ist, alle Vars an die Spitze einer Funktion zu setzen. Für den Fall, dass eine Variable vorübergehend in einem Codeabschnitt verwendet wird, ist es besser, var
in diesem Abschnitt zu deklarieren , damit der Abschnitt eigenständig ist und kopiert werden kann. Andernfalls kopieren Sie während des Refactorings einige Codezeilen in eine neue Funktion, ohne die zugehörigen Elemente separat auszuwählen und zu verschieben var
, und Sie haben einen versehentlichen globalen Fehler.
Bestimmtes:
for (var i; i<100; i++)
do something;
for (var i; i<100; i++)
do something else;
Crockford wird Ihnen empfehlen, das zweite zu entfernen var
(oder beide var
s zu entfernen und var i;
oben zu tun ), und jslint wird Sie dafür beschimpfen. Aber IMO ist es wartbarer, beide zu behaltenvar
s und den gesamten zugehörigen Code zusammenzuhalten, anstatt ein zusätzliches, leicht vergessenes Stück Code oben in der Funktion zu haben.
Persönlich neige ich dazu, als var
erste Zuweisung einer Variablen in einem unabhängigen Codeabschnitt zu deklarieren , ob es in einem anderen Teil derselben Funktion eine andere separate Verwendung desselben Variablennamens gibt oder nicht. Für mich var
ist es eine unerwünschte JS-Warze , überhaupt deklarieren zu müssen (es wäre besser gewesen, wenn die Variablen standardmäßig lokal wären). Ich sehe es nicht als meine Pflicht an, die Einschränkungen von [einer alten Revision von] ANSI C auch in JavaScript zu duplizieren.
(*: außer in verschachtelten Funktionskörpern)