2012-02-09 1 views
10

Je regarde le document Code Conventions for JavaScript de Douglas Crockford, et il dit que var devrait être alphabétique, et un par ligne.Déclarations 'var' à ligne unique, ou une par ligne?

var a;     // array of class names 
var c = node.className; // the node's classname 
var i;     // loop counter 

Cependant, l'jsLint standard (et jsHint) est de les déclarer sur une seule ligne, et il jette cette erreur si elle est faite de façon

de Crockford trop de déclarations var

Par conséquent, jsLint le veut comme ça.

var a, c = node.className, i; 

Cela me semble tout à fait contradictoires, et si minute probablement tout à fait dans le cadre général de la programmation, je suis l'espoir d'obtenir ce droit avant que je me trompe.

Quelle est la pratique généralement acceptée lors de la déclaration de vars JavaScript?

+8

Je vote un par ligne. – Zenexer

+2

Un autre avocat un par ligne; beaucoup plus facile à lire, IMO. –

+1

Si vous devez les classer par ordre alphabétique, je dirais que la fonction est trop grande ... –

Répondre

13

LINT veut une seule déclaration de déclaration var, mais elle peut être répartie sur plusieurs lignes.

var a, b, c; 

ou

var a, 
    b, 
    c; 

La raison pour laquelle il veut une déclaration unique est d'éviter toute confusion dont les variables appartiennent à la portée locale.Avec une instruction var unique, toutes les variables de portée locale sont contenues dans un seul emplacement dans la portée et n'importe qui peut lire le code rapidement pour voir ce qu'elles sont.

Il est en outre recommandé que cette déclaration de déclaration soit en haut de la portée, puisque le mécanisme de levage JavaScript les y déplace avant l'exécution. En écrivant votre code pour attendre cette déclaration en haut de la portée, le mécanisme de levage ne peut provoquer aucun comportement inattendu.

0

Vous pouvez déclarer plusieurs variables et les affecter dans la même ligne. C'est une question de préférence personnelle.

2

L'argument est la plupart du temps une discussion de style, cependant, il est beaucoup plus important de d'accord sur un et norme que votre équipe utiliser régulièrement.

3

Aucun des deux moyens n'est erroné, mais je préfère généralement utiliser des déclarations de style de ligne unique au début d'un bloc de code. Le plus important est de le garder cohérent. Exemple:

function() { 
    var foo = "bar", 
     number = 123, 
     etc = "..."; 

    // stuff.. 
} 
+1

Merci @ jdc0589 c'est utile. Je suppose que je n'aurais pas dû dire "se tromper" car je connais les deux façons de travailler. Je suis plus tournage de la méthode généralement acceptée, qui, par la preuve dans les réponses, pointe à cette approche à coup sûr. –

3

Même une combinaison est correcte. Tout est une question de préférence. Si vous travaillez en équipe, posez des questions sur la préférence et gardez-la cohérente.

var a, 
    c = node.className, 
    i; 
+0

ah oui, c'est très bien. Convient aux deux directions. Ne viole pas jsLint, et adhère toujours à la norme de Crockford. –

2

Une autre option (il est celui que je l'utilise) est:

var a = ..., 
    b = ..., 
    c, d; 

Cela montre clairement le nombre de variables je déclarer et qu'ils sont tous liés d'une certaine façon (depuis que je Je les déclare dans le même espace, ils le sont toujours). Cela permet également de différencier les variables qui ont déjà des valeurs et celles qui n'en ont pas. Cela dit, je ne déclare que des variables sans les assigner très rarement. Sauf si je travaille avec du code qui suit une norme différente, c'est ce que je fais. Et c'est la chose la plus importante: suivez le style de votre projet. Sinon, passez par votre préférence. Si vous n'y prêtez pas attention, utilisez mon style;)

+3

"rend clair"? Je ne suis pas. Un rapide coup d'œil montre que vous déclarez trois variables, puisqu'il y a trois lignes. Cependant, une inspection plus approfondie montre que vous en déclarez quatre. Pensez-vous vraiment que l'utilisation de trois lignes pour déclarer quatre variables est claire? –

Questions connexes