7 Stimmen

Gibt es einen Vorteil, Variablen zusammen mit einem Komma statt einzeln in JavaScript zu definieren?

Beim Lesen von Crockfords The Elements of JavaScript Style fällt mir auf, dass er Variablen gerne so definiert:

var first='foo', second='bar', third='...';

Welchen Nutzen bietet diese Methode gegenüber dieser:

var first='foo';
var second='bar';
var third='...';

Offensichtlich erfordert letzteres mehr Tipparbeit, aber abgesehen von der Ästhetik frage ich mich, ob durch die Verwendung des erstgenannten Stils ein Leistungsbonus erzielt wird.

11voto

Christian C. Salvadó Punkte 763569

Abgesehen von der Ästhetik und dem Download-Fußabdruck könnte ein weiterer Grund sein, dass die var-Anweisung hoisting unterliegt. Das bedeutet, dass unabhängig davon, wo eine Variable innerhalb einer Funktion platziert ist, sie an den Anfang des Gültigkeitsbereichs verschoben wird, in dem sie definiert ist.

Zum Beispiel:

var außerhalb_des_gültigkeitsbereichs = "außerhalb des Gültigkeitsbereichs";
function f1() {
    alert(außerhalb_des_gültigkeitsbereichs);
    var außerhalb_des_gültigkeitsbereichs = "innerhalb des Gültigkeitsbereichs";
}
f1();

Wird wie folgt interpretiert:

var außerhalb_des_gültigkeitsbereichs = "außerhalb des Gültigkeitsbereichs";
function f1() {
    var außerhalb_des_gültigkeitsbereichs; // ist undefiniert
    alert(außerhalb_des_gültigkeitsbereichs);
    außerhalb_des_gültigkeitsbereichs = "innerhalb des Gültigkeitsbereichs";
}
f1();

Aufgrund dessen und des einzigen Funktionsgeltungsbereichs, den JavaScript hat, empfiehlt Crockford, alle Variablen oben in der Funktion in einer einzigen var-Anweisung zu deklarieren, um daran zu erinnern, was tatsächlich passieren wird, wenn der Code ausgeführt wird Link zur Empfehlung von Crockford.

7voto

David M Punkte 69725

Da JavaScript normalerweise zum Client-Browser heruntergeladen wird, ist Kürze tatsächlich eine wertvolle Eigenschaft. Je mehr Bytes heruntergeladen werden müssen, desto langsamer wird es. Also ja, es gibt einen Grund abgesehen von der Ästhetik, auch wenn es kein massiver ist.

Ebenso werden Sie sehen, dass Leute kürzere Variablennamen längeren vorziehen.

Persönlich achte ich nicht darauf, Leerzeichen zu minimieren, da es Minimierer gibt, die diese Art von Dingen für Sie tun können (zum Beispiel in YUI), und ein Mangel an Einrückung und Abstand führt zu weniger wartbarem Code.

4voto

bobince Punkte 512550

Kein Unterschied in der Semantik und keine messbare Leistungsunterschiede. Schreibe was auch immer am klarsten ist.

Bei einfachen Beispielen wie:

var first= 'foo', second= 'bar', third= 'bof';

ist der prägnante Einzeiligenansatz wahrscheinlich besser lesbar. Andererseits kann man es auch übertreiben und anfangen, die Hälfte des Programms innerhalb eines einzigen var-Statements zu schreiben. Hier ist ein zufälliges Beispiel aus dem jQuery-Quellcode:

var name = match[1],
    result = Expr.attrHandle[ name ] ?
        Expr.attrHandle[ name ]( elem ) :
        elem[ name ] != null ?
            elem[ name ] :
            elem.getAttribute( name ),
    value = result + "",
    type = match[2],
    check = match[4];

Ich finde das (bei weitem nicht das schlimmste Beispiel) etwas abstoßend. Längere Beispiele können recht schwer zu lesen werden (Moment, war ich in einem var-Statement?) und man endet damit, die Klammern zu zählen, um herauszufinden, was ein mehrzeiliger Ausdruck ist und was nur ein erweiterter var-Block ist.

2voto

kemiller2002 Punkte 110605

Ich glaube, dass sein Ziel darin besteht, alle Variablen als absolut erste Anweisung in einer Funktion zu deklarieren (Sie werden bemerken, dass JSLint sich darüber beschwert, wenn Sie es verwenden und sie nicht in der ersten Zeile deklarieren). Dies liegt an den Einschränkungen (oder Eigenheiten) der JavaScript-Scope-Deklaration. Crockford betont dies als bewährte Praxis für wartbaren JavaScript-Code. Das zweite Beispiel deklariert sie oben, aber nicht in der ersten Ausführungsanweisung. Persönlich sehe ich keinen Grund, warum man das erste dem zweiten vorziehen sollte, aber dem ersten zu folgen erzwingt, dass alle Variablen deklariert werden, bevor in der Funktion etwas anderes getan wird.

David hat recht, dass je größer das Skript ist, desto länger dauert es, um herunterzuladen, aber in diesem Fall ist der Unterschied zwischen den beiden minimal und kann durch die Verwendung von YUI-Komprimierung usw. behandelt werden.

1voto

David R Tribble Punkte 11254

Es ist eine persönliche Programmierungsstil-Wahl.

Auf der einen Seite gibt es Lesbarkeit, bei der das Platzieren jeder Variablendeklaration in einer separaten Zeile offensichtlicher macht, was vor sich geht.

Andererseits gibt es Kürze, wobei Sie ein paar zusätzliche Bytes über das Netzwerk übertragen eliminieren. Es ist im Allgemeinen nicht genug, um sich Sorgen zu machen, es sei denn, Sie haben es mit langsamen Netzwerken oder begrenztem Speicher auf der Client-Browser-Seite zu tun.

Kürze wird auch als Faulheit auf Seiten des Programmierers bezeichnet, was einer der Gründe ist, warum viele Puristen es vermeiden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X