Quelles sont les différences et/ou les avantages, le cas échéant, de l'utilisation de virgules lors de la déclaration d'un groupe de variables plutôt que de points-virgules.
Par exemple:
var foo = 'bar', bar = 'foo';
versus
var foo = 'bar';
var bar = 'foo';
Je sais que si vous spécifiez le mot clé var
sur la première variable dans le premier exemple, il persiste dans toutes les variables, de sorte qu'elles produisent toutes les deux le même résultat final concernant la portée. S'agit-il simplement d'une préférence personnelle, ou y a-t-il un avantage de performance à le faire de toute façon?
Aucun avantage de performance, juste une question de choix personnel et de style.
La première version est juste plus succincte.
Mise à jour:
En termes de quantité de données passant par le fil, bien sûr moins c'est mieux, mais vous auriez besoin de beaucoup de déclarations var
supprimées afin de voir un impact réel.
Minification a été mentionné comme quelque chose que le premier exemple aidera pour une meilleure minification, cependant, comme Daniel Vassallo le souligne dans les commentaires, un bon minificateur le fera automatiquement pour vous de toute façon, donc à cet égard aucun impact que ce soit.
Après avoir lu Crockford et d'autres, j'ai commencé à enchaîner mes variables exclusivement par des virgules. Plus tard, j'ai été vraiment ennuyé par le Chrome débogueur DevTools qui ne s'arrêtait pas aux définitions de variables avec une virgule. Pour le débogueur, les définitions de variables chaînées avec une virgule sont une seule instruction, tandis que plusieurs instructions var sont plusieurs instructions auxquelles le débogueur peut s'arrêter. Par conséquent, je suis revenu de:
var a = doSomethingA,
b = doSomethignB,
c = doSomethingC;
À:
var a = doSomethingA;
var b = doSomethignB;
var c = doSomethingC;
À l'heure actuelle, je trouve la deuxième variante beaucoup plus propre, sans parler de son avantage à résoudre le problème du débogueur.
L'argument "moins de code à travers le fil" n'est pas convaincant, car il existe des minificateurs.
Je préfère le var-per-variable
notation:
var a = 2
var b = 3
parce que l'autre comma-instead-of-another-var
la notation a ces trois défauts:
1. Difficile à entretenir
Considérez ce code:
var a = 1,
b = mogrify(2),
c = 3
Mais bon, que fait le mogrify? Imprimons b pour découvrir:
var a = 1,
b = mogrify(2),
console.log(b)
c = 3
casse les choses
2. Difficile à lire
Le var dans la mendicité de la ligne communique clairement qu'il y aura une nouvelle variable initiée.
var get_all_Unicorn_promise = db.get_all_unicorns((Unicorn) => {
Unicorn.legs.map((leg) => {
leg.log('yes')
})
}).sort(),
c = 3
Que diable est le c = 3
y faire non?
. Pas cohérent
Considère ceci:
var a = 1,
b = 2,
c = 3
Avec var-per-variable
chaque déclaration suit la même structure. Avec comma-instead-of-another-var
la première variable est déclarée différemment des autres. Si vous décidez, par exemple, de déplacer la première variable dans un cycle for, vous devrez ajouter var au milieu des déclarations
Autre que la préférence, il semble que la majorité des projets notables utilisent le var-per-variable
notation
Je suis d'accord avec les autres répondants que c'est principalement une question de style personnel. Mais pour apporter une opinion "faisant autorité" dans la discussion, voici ce que Douglas Crockford dit sur le site Web de l'outil JSLint populaire :
Mais parce que JavaScript n'a pas de portée de bloc, il est plus judicieux de déclarer toutes les variables d'une fonction en haut de la fonction. Il est recommandé d'utiliser une seule instruction var par fonction. Cela peut être appliqué avec l'option
onevar
.
Comme d'autres l'ont noté, c'est une préférence de style. JSLint peut vous indiquer de n'avoir qu'un var
par fonction (si vous utilisez les "bonnes pièces"). Ainsi, si vous utilisez JSLint pour vérifier votre code (ce n'est pas une mauvaise idée, à mon humble avis), vous finirez par utiliser le premier format plus que ce dernier.
D'autre part, le même auteur, Douglas Crockford , dit de mettre chaque variable dans sa propre ligne dans ses conventions de codage . Vous pouvez donc décocher la case "Tout un var
par fonction" dans JSLint si vous l'utilisez. ;-)
Comme je n'y vois aucune référence, ici est un lien vers la spécification ECMA-262, qui est la spécification sous-jacente de JavaScript. La grammaire de cette page dit:
12.2 Variable Statement
Syntax
VariableStatement :
var VariableDeclarationList ;
VariableDeclarationList :
VariableDeclaration
VariableDeclarationList , VariableDeclaration
VariableDeclarationListNoIn :
VariableDeclarationNoIn
VariableDeclarationListNoIn , VariableDeclarationNoIn
VariableDeclaration :
Identifier Initialiseropt
VariableDeclarationNoIn :
Identifier InitialiserNoInopt
Initialiser :
= AssignmentExpression
InitialiserNoIn :
= AssignmentExpressionNoIn
Ce que vous pouvez en tirer est d'utiliser ou non des virgules. Dans les deux cas, il finit par être analysé en tant que VariableDeclaration
et est traité exactement de la même manière. Il ne devrait pas y avoir de différence dans la façon dont le moteur de script traite les deux déclarations. Les seules différences seraient celles déjà mentionnées dans d'autres réponses - économiser plus d'espace et des différences pratiquement incommensurables dans le temps qu'il faut pour appliquer la grammaire pour trouver tous les VariableDeclarations
lorsque le script est compilé.
Je ne pense pas qu'il y ait de différence notable, en ce qui me concerne, c'est juste une préférence personnelle.
Je déteste avoir plusieurs déclarations var, donc je fais habituellement:
var
one
,two
,three
,four
;
Comme il est plus court et sans doute plus lisible, pas de bruit var
à regarder.
Le premier enregistre quelques caractères - il y a donc une très petite économie en termes de taille de fichier JS et donc de consommation de bande passante. La seule fois où cela deviendrait perceptible serait dans des cas extrêmes.
Je préfère la deuxième version (chacune a son propre var
). Je pense que c'est parce que je viens d'un milieu C++. En C++, vous pouvez déclarer des variables comme vous le faites dans votre premier exemple, mais il est mal vu (cela conduit facilement à des erreurs lorsque vous essayez de créer des pointeurs de cette façon).
Si vous réduisez votre javascript, il y a un avantage assez important:
var one, two, three, four;
devient
var a, b, c, d;
Tandis que
var one;
var two;
var three;
var four;
devient
var a;
var b;
var c;
var d;
Il s'agit de trois instances supplémentaires de var
, qui peuvent s'additionner au fil du temps.
Voir la série d'articles "A List Apart" "Better Javascript Minification" Partie 1 et Partie 2