Frage

Ich möchte mehrere Variablen in einer Funktion deklarieren:

function foo() {
    var src_arr     = new Array();
    var caption_arr = new Array();
    var fav_arr     = new Array();
    var hidden_arr  = new Array();
}

Ist dies der richtige Weg, dies zu tun?

var src_arr = caption_arr = fav_arr = hidden_arr = new Array();
War es hilfreich?

Lösung

Ja, es ist , wenn Sie sie alle auf das gleiche Objekt im Speicher wollen , aber wahrscheinlich wollen sie einzelne Arrays sein, so dass, wenn man mutiert, die anderen sind nicht betroffen.

Wenn Sie nicht sie alle auf das gleiche Objekt möchten, tun

var one = [], two = [];

Die [] ist eine Abkürzung für ein Array-Literal erzeugt wird.

Hier ist ein Konsolenprotokoll, das die Differenz zeigt an:

>> one = two = [];
[]
>> one.push(1)
1
>> one
[1]
>> two
[1]
>> one = [], two = [];
[]
>> one.push(1)
1
>> one
[1]
>> two
[]

in dem ersten Abschnitt, und I definiert one two Punkt auf den gleichen Objekt / Array im Speicher. Wenn ich die .push Methode verwenden, schiebt es 1 zu dem Array, und so sowohl one und two haben 1 innen. In dem zweiten, da ich einzigartigen Arrays pro Variable definiert so, wenn ich zu einem geschoben, zwei Jahren alt war nicht betroffen.

Andere Tipps

Bitte wegbleiben von diesem Zuweisungsmuster, auch wenn Sie alle Variablen haben wollten auf das gleiche Objekt zeigen.

In der Tat, nur die erste wird eine Variablendeklaration , der Rest sind nur Zuweisungen möglicherweise nicht deklarierte Bezeichner

Wert auf einen nicht deklarierten Bezeichner zuweisen (auch bekannt als nicht angemeldete Zuordnung ) wird dringend abgeraten, weil, wenn die Kennung nicht auf den Umfang Kette gefunden wird, eine globale Variable erstellt wird. Zum Beispiel:

function test() {
    // We intend these to be local variables of 'test'.
    var foo = bar = baz = xxx = 5;
    typeof foo; // "number", while inside 'test'.
}
test();

// Testing in the global scope. test's variables no longer exist.
typeof foo; // "undefined", As desired, but,
typeof bar; // "number", BAD!, leaked to the global scope.
typeof baz; // "number"
typeof xxx; // "number"

Darüber hinaus ist die ECMAScript 5th Strict-Modus, nicht zulässt, ist diese Art von Aufgaben. Unter strengem Modus ein zu einem gemachten Zuordnung nicht deklarierte Bezeichner eine TypeError Ausnahme verursachen wird, impliziert Globals zu verhindern.

Im Gegensatz dazu ist hier, was wir sehen, wenn richtig geschrieben:

function test() {
    // We correctly declare these to be local variables inside 'test'.
    var foo, bar, baz, xxx;
    foo = bar = baz = xxx = 5;
}
test();

// Testing in the global scope. test's variables no longer exist.
typeof foo; // "undefined"
typeof bar; // "undefined"
typeof baz; // "undefined"
typeof xxx; // "undefined"

Nein, die zweite Anweisung vier Referenzen auf das gleiche Array erstellen. Sie wollen:

var src_arr     = [],
    caption_arr = [],
    fav_arr     = [],
    hidden_arr  = [];

All diese Variablen auf ein Array-Objekt beziehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top