89 votes

JavaScript définition de la variable: des Virgules contre des points-Virgules

Quelles sont les différences et/ou les avantages, le cas échéant, de l'utilisation des virgules lors de la déclaration d'un groupe de variables plutôt que des points-virgules.

Par exemple:

var foo = 'bar', bar = 'foo';

rapport

var foo = 'bar';
var bar = 'foo';

Je sais que si vous spécifiez l' var mot-clé sur la première variable dans le premier exemple, il persiste à travers toutes les variables, de sorte qu'ils produisent le même résultat quant à sa portée. Est-il juste préférence personnelle, ou est-il un avantage de performance pour le faire de toute façon?

73voto

Oded Points 271275

Aucun avantage en matière de performances, juste une question de choix personnel et de style.

La première version est un peu plus concis.


Mise à jour:

En termes de la quantité de données circulant sur le réseau, bien sûr, le moins est le mieux, mais vous auriez besoin d'un enfer de beaucoup de retiré var des déclarations dans le but de voir l'impact réel.

Minification a été mentionné comme quelque chose que le premier exemple de l'aide pour mieux minification, cependant, que Daniel Vassallo points dans les commentaires, une bonne minifier fera automatiquement pour vous de toute façon, aucun impact.

56voto

MooGoo Points 11094

Fun Fact du Jour: En JavaScript, vous pouvez utiliser des virgules pour regrouper un nombre quelconque d' expressions en une seule instruction. C'est fondamentalement un artefact de l' for déclaration, où l'affectation multiple expressions sont souvent regroupés dans l'en-tête. La plupart des gens ne savent pas que cette syntaxe est toujours valide à l'extérieur d'un for boucle. De sorte que vous pouvez le faire

var i = 0;
while (i < 10)
    alert(i + ' * ' + i + ' = '),
    alert(i * i + '!!'),
    i++;

alert("Wasn't that fun??");

Au lieu de

var i = 0;
while (i < 10) {
    alert(i + ' * ' + i + ' = ');
    alert(i * i + '!!');
    i++;
}

alert("Wasn't that fun??");

Si la plupart des gens vous conseille de ne pas.

États, tels que l' var, ne peut pas être utilisé de cette façon. C'est vous ne pouvez pas avoir var dans le milieu d'un tas d'autres expressions séparées par des virgules.

De toute façon... le plus que vous savez...

29voto

Felix Points 166

Après la lecture de Crockford et les autres, j'ai commencé à la chaîne de mes variables à virgule exclusivement. Puis, plus tard, je me suis vraiment ennuyé par le Chrome DevTools débogueur qui ne s'arrête pas à des définitions de variables avec des virgules. Pour le débogueur, des définitions de variables enchaîné avec les virgules sont une seule instruction, tandis que de multiples var états sont multiples déclarations à laquelle le débogueur ne peut arrêter. Donc, je suis passé de retour à partir de:

var a = doSomethingA,
    b = doSomethignB,
    c = doSomethingC;

Pour:

var a = doSomethingA;
var b = doSomethignB;
var c = doSomethingC;

Maintenant, je trouve la deuxième variante beaucoup plus propre. D'autres expérimenté le débogueur problème? Merci de ne pas venir avec les "moins de code à travers le fil" argument. Il y a minifiers.

7voto

Daniel Vassallo Points 142049

Je suis d'accord avec les autres answerers que c'est surtout une question de style personnel. Mais pour apporter une "Autorité" de l'opinion dans le débat, c'est ce que Douglas Crockford est dit sur le site web de la populaire JSLint outil:

Mais parce que le JavaScript n'a pas de bloc de portée, il est plus sage de déclarer la totalité d'une fonction de variables dans le haut de la fonction. Il est recommandé qu'une seule instruction var être utilisé par la fonction. Cela peut être exécuté avec l' onevar option.

3voto

Mike McCaughan Points 2087

Comme d'autres l'ont noté, c'est un style de préférence. JSLint pourraient vous dire que d'avoir seulement un var par fonction (si vous utilisez les "Bons Éléments"). Ainsi, si à l'aide de JSLint de vérifier votre code (pas une mauvaise idée, à mon humble avis), vous finirez en utilisant le premier format de plus que le dernier.

D'autre part, le même auteur, Douglas Crockford, dit de mettre chaque variable dans sa propre ligne dans ses conventions de codage. De sorte que vous pouvez décocher la case "Toutes les un var par la fonction" case à cocher dans JSLint si vous l'utilisez. ;-)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X