2012-03-17 7 views
6

¿Cuál es el enfoque menos propenso a errores para declarar variables en JavaScript?Convenciones de código de JavaScript - declaración de variable

var a; 
var b; 
var c; 

o

var a, 
    b, 
    c; 

jQuery y Dojo utiliza el segundo método y personalmente es mi favorito en términos de legibilidad del código, el problema es que se me hace más difícil de depurar.

Ejemplo 1:

var a, 
    b, 
    c; // oops.. semicolon instead of comma 
    d, 
    e; 

Ejemplo 2:

Durante la búsqueda de una determinada variable en el proyecto, var se destaca mejor que la variable se declara.

EDIT: Los ejemplos originales fueron incorrectos, he cometido un error al copiar y pegar. El código ya está actualizado, disculpe el incoveniente.

+1

¿Quería usar punto y coma en lugar de comas? Eso arroja errores variables indefinidos en Safari. –

+0

@JeffreySweeney ¿estaba ejecutando el código con un error? las comas funcionan bien. – david

+0

@david Comas do, pero el punto y coma no. –

Respuesta

5

Las declaraciones de variables múltiples (en lugar de combinadas) son menos propensas a errores, por las razones que ha mencionado. Sin embargo, las declaraciones combinadas tienen otras ventajas:

  • JSLint y posiblemente otros borra de se quejan de múltiples var palabras clave por alcance.
  • Una sola palabra clave var minimiza mejor que muchas, por razones obvias.
  • La combinación de declaraciones obliga a declarar las variables en un solo lugar, probablemente cerca del comienzo de la función en la que residen, lo que se considera una buena práctica.

En la otra cara, como mencionaste, los errores se pueden hacer con declaraciones de variables combinadas, y se pueden representar torpemente en un diff.

Mientras mantenga un estilo uniforme de declaración de variables durante todo el proyecto, el estilo que elija no debería importar realmente.

0

La segunda opción es mejor en mi libro, ya que es menos redundante. Los navegadores e IDEs modernos hacen que sea muy fácil encontrar un error como el que llamaste.

Aquí hay un jsFiddle que muestra lo que sucede. La inserción accidental de un punto y coma en la serie provoca un Uncaught ReferenceError. Es una solución rápida y una pequeña compensación para una sintaxis más agradable. Si este es el peor error con el que tienes que lidiar cuando escribes JavaScript, estás teniendo un gran día.

Irónicamente, tenía un error tipográfico en su segundo ejemplo - punto y coma después de a. Whoops. :)

EDIT: Original poster fixed typo; Dejo la mención porque es relevante para la pregunta original.

+0

Errores como el que hizo, primera opción mejor :) – Ramesh

+0

@Josh Earl Ya lo arreglé, gracias. –

1
var a; 
var b; 
var c; 

es el mejor enfoque, ya que no arrojará un error indefinido. Además, las variables se delimitarán correctamente & no en alcance global.

var a=10; 
    b=5; 

resultaría b en el alcance global.

EDITAR: Esto estaba en contexto con la muestra publicada originalmente https://stackoverflow.com/revisions/9746359/2. Con el Contexto actualizado, se reduce a más de preferencia individual. Mi recomendación será no dar lugar a ese tipo de errores, ya que es difícil encontrarlos.

+3

"las variables se delimitarán correctamente y no en el alcance global". ¿¿¿Qué??? Las variables se elevan a la parte superior del alcance in, pero function() {var a, b, c; } todavía tiene las variables delimitadas como en la función. – Corbin

+0

@Ramesh Sí ... no tanto.La única vez que una variable automáticamente termina en el alcance global es cuando no se declara. Pregunta acerca de los estilos equivalentes para declarar una variable, y no necesariamente coloca las variables en el ámbito global. –

+1

Un pequeño error al asignar var var = 10; b = 15; resultaría en un alcance global. Su pregunta inicialmente tenía var a; b, c; – Ramesh

2

Prefiero su segundo método de usar una sola palabra clave var. Recientemente, he ido un paso más allá e instalé tipos en cada variable para ayudarme a prevenir una nueva edición involuntaria del tipo más adelante. Un ejemplo es:

var a = 0, 
    b = 0, 
    c = {}, 
    d = [], 
    f = ""; 

que suministrar un valor real aquí si tengo un valor para el suministro en este punto. Si no me suministrar los siguientes valores ficticios:

  • 0 para tipos de números
  • [] para array
  • {} para el objeto literal y DOM nodos
  • "" para cadena
  • function() {return;} para funciones
  • false para boolean
  • para este propósito, no me preocupo por la preasignación de tipos para Math, Date o RegExp.
+0

Esa parece ser una gran solución que también previene los errores relacionados de tipo débil. –

+0

Mi principal motivación es el rendimiento. Los últimos intérpretes prefieren la tipificación estricta, por lo que tuve que cambiar mi comportamiento y estilo para adaptarme a este nuevo requisito no oficial de codificación de calidad profesional. – austincheney

+2

¿Por qué 'function() {return;}'? 'function() {}' haría lo mismo. – icktoofay

0

Hay una ventaja de tener la declaración múltiple de una variable usando 1 var.

Tienes la secuencia de comandos reducida minima. Obviamente, los 4 bytes requeridos para tener una declaración var no hacen mucha diferencia hasta su lugar como stackoverflow.com. Millones y millones de descargas == gigas de transferencia solo se basan en unas pocas declaraciones adicionales de var.

+1

Un buen minificador como UglifyJS aplastará automáticamente las sentencias var secuenciales en una sola, lo que hace que ese punto no sea fácil –

Cuestiones relacionadas