Quelles sont les différences et / ou avantages, le cas échéant, d'utiliser 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';
contre
var foo = 'bar';
var bar = 'foo';
Je sais que si vous spécifiez le var
mot - clé 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 en ce qui concerne la portée. Est-ce simplement une préférence personnelle ou y a-t-il un avantage en termes de performances à le faire dans un sens ou dans l'autre?
la source
Après avoir lu Crockford et d'autres, j'ai commencé à enchaîner mes variables exclusivement avec des virgules. Puis plus tard, j'ai été vraiment ennuyé par le débogueur Chrome DevTools qui ne s'arrêtait pas aux définitions de variables avec virgule. Pour le débogueur, les définitions de variables enchaî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:
À:
À présent, 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.
la source
debugger
, puis j'en ajoute un autrevar
et je continue à les enchaîner par des virgules. Ensuite, lorsque j'ai terminé le débogage, je reviens en arrière et supprime lesdebugger
fichiers et extravar
.Je préfère la
var-per-variable
notation:car l'autre
comma-instead-of-another-var
notation a ces trois défauts:1. Difficile à maintenir
Considérez ce code:
Mais bon, que fait le mogrify? Imprimons b pour savoir:
casse des trucs
2. Difficile à lire
Le var dans le début de la ligne indique clairement qu'il y aura une nouvelle variable initiée.
Qu'est-ce que c'est que
c = 3
faire là-bas?3. Pas cohérent
Considère ceci:
Avec
var-per-variable
chaque déclaration, suivez la même structure. Aveccomma-instead-of-another-var
la première variable est déclarée d'une manière différente 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éclarationsAutre que la préférence, il semble que la majorité des projets notables utilisent la
var-per-variable
notationla source
Je suis d'accord avec les autres répondants sur le fait que c'est principalement une question de style personnel. Mais pour apporter une opinion «faisant autorité» dans la discussion, voici ce que dit Douglas Crockford sur le site Web du populaire outil JSLint :
la source
let
construction) n'ont une portée de bloc.let
peut être utilisé dans plus que Mozilla JS ( voir ici ). Cela fait partie de la spécification ES6 , mais la plupart des navigateurs travaillent encore sur la mise en œuvre des fonctionnalités d'ES6.Comme d'autres l'ont noté, c'est une préférence de style. JSLint peut vous dire de n'en avoir qu'un
var
par fonction (si vous utilisez les "Good Parts"). 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. ;-)la source
var
déclarations séparées ou enchaînées par des virgules.)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 le fais généralement:
Comme il est plus court et sans doute plus lisible, aucun
var
bruit à regarder.la source
var one, two, three four;
très rapidement. Ajout de lignes-pour-la-bien-de-lignes Javascript peut être dangereux (interprètes JS peuvent insérer leur propre;
--Si vous ne prévoyez pas cela , alors vous trouverez rapidement des effets secondaires. De plus, ce qui,
de » bug de moi , les mots-clés qui obtiennent leur propre ligne me bogue, le;
sur sa propre ligne me bogue. Êtes-vous payé à la ligne?var
déclaration. (Bien que je sois d'accord avec vous sur les virgules de début, et à proposvar
et le point-virgule final étant sur leurs propres lignes - les trois meComme je ne vois aucune référence à celui-ci, voici un lien vers la spécification ECMA-262, qui est la spécification sous-jacente de JavaScript. La grammaire de cette page dit:
Ce que vous pouvez en tirer, c'est d'utiliser des virgules ou non n'a pas d'importance. Dans tous les cas, il finit par être analysé comme un
VariableDeclaration
et est traité exactement de la même manière. Il ne devrait y avoir aucune différence dans la manière 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 - économisant plus d'espace et des différences pratiquement incommensurables dans le temps qu'il faut pour appliquer la grammaire pour trouver tout leVariableDeclarations
moment où le script est compilé.la source
Le premier économise 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. Le seul moment où cela deviendrait perceptible serait dans des cas extrêmes.
la source
Je préfère la deuxième version (chacune a la sienne
var
). Je pense que c'est parce que je viens d'un fond C ++. En C ++, vous pouvez déclarer des variables comme vous le faites dans votre premier exemple, mais c'est mal vu (cela conduit facilement à des erreurs lorsque vous essayez de créer des pointeurs de cette façon).la source
Si vous réduisez votre javascript, il y a un avantage assez important:
devient
Tandis que
devient
C'est trois instances supplémentaires de
var
, qui peuvent s'additionner avec le temps.Voir la série d'articles "A List Apart" "Meilleure minification Javascript" Partie 1 et Partie 2
la source
var
s répétés n'augmenteront pas sensiblement la taille du fichier gzippé (si je comprends bien gzipping).