Ich würde gerne wissen, warum sich jsLint beschwert, dass beim Definieren einiger Variablen wie dieser möglicherweise eine Variable verloren geht:
var foo = bar = {};
Es heißt, ich könnte bar
lecken.
Meine Vermutung ist, dass bar
eine globale Variable ist. Wie kann ich dann foo
und bar
zuweisen, um in einer Zeile auf dasselbe Objekt zu zeigen? JavaScript lässt mich nicht schreiben:
var foo = var bar = {};
Oder ist das Problem etwas anderes?
3 Antworten
Der Grund, warum es sich über das "Auslaufen einer Variablen" beschwert, ist, dass Sie nur die lokale Variable foo
deklarieren. bar
wird nicht deklariert, sondern nur zugewiesen, sodass eine globale Variable erstellt wird. Ihre Aussage entspricht:
var foo = (bar = {});
Das ist die Abkürzung für:
bar = {};
var foo = bar;
Auf diese Weise können Sie sehen, dass die Variable bar
nicht deklariert ist. Wenn Sie mehrere Variablen in einer einzelnen var
- Anweisung deklarieren möchten, müssen Sie sie durch Kommas trennen:
var bar = {}, foo = bar;
Oder Sie können sie als separate Anweisungen schreiben:
var bar = {};
var foo = bar;
Sie können auch die Erklärungen und Zuordnungen trennen:
var foo, bar;
foo = bar = {};
Der beste Ansatz wäre:
var foo = {} , bar = {};
Aber foo
und bar
würden sich auf zwei verschiedene Objekte beziehen.
Wenn Sie möchten, dass sie sich auf dasselbe Objekt beziehen, dann:
var foo = {}, bar = foo;
Sie haben 2 Möglichkeiten:
var foo = {},
bar = {};
Oder:
var foo, bar;
foo = bar = {};
Der erste erstellt einzelne Objekte für foo
und bar
.
Im zweiten Beispiel zeigen sowohl foo
als auch bar
auf das gleiche Objekt.
Sie können nicht (/ sollten es nicht versuchen) deklarieren und mehrere Variablen mit einer einzigen var
Anweisung, und a zuweisen Einzelobjektliteral in einer Zeile. Dann deklarieren Sie einfach mehrere Variablen, die auf dasselbe Objekt verweisen.