2011-03-28 15 views
16

Cuando leí código javascript que está limpio y escrito por personas que son, evidentemente, muy bueno en eso, a menudo veo este patrón¿Cuál es la ventaja de inicializar múltiples variables de JavaScript con la misma palabra clave var?

var x = some.initialization.method(), 
    y = something.els(), 
    z; 

¿Cuál es la ventaja de que durante la escritura

var x = some.initialization.method(); 
var y = something.els(); 
var z; 

El el segundo formato es más fácil de mantener, ya que cada línea existe por sí misma. De modo que puede borrar una línea o agregar una línea, y no tener que mirar alrededor para ver si es la primera o la última variable que se inicializará. Esto también significa que el control de fuente diffs/merges funcionará mejor. Dadas estas desventajas, supongo que hay alguna ventaja en el primer formato, pero ¿qué es? Seguramente se ejecutan de manera idéntica porque es lo mismo para el analizador.

+1

Bueno, no es más rápido, por desgracia: http://jsperf.com/number-of-vars –

+1

El primero dice: * Estas son las variables. Período. * El segundo dice: * Aquí hay uno, y luego otro, y luego otro, y ... * – Gumbo

Respuesta

9

Hay una ligera ventaja con el tamaño de la javascript que se envía al navegador; 'Sólo espacios en blanco' modo de Closure compiler en Google recopilará la única versión var en:

var x=some.initialization.method(),y=something.els(),z; 

y múltiples como:

var x=some.initialization.method();var y=something.els();var z; 

I cambiado su else-els por lo que sería compilar.

Esto no es una ganancia masiva (especialmente si también está comprimiendo los archivos), y el modo de compilación 'simple' hará esto para usted de todos modos, por lo que probablemente no estaría demasiado preocupado a menos que pueda encuentra razones más convincentes

Una razón por la que puede no querer hacer esto es que si accidentalmente usa un punto y coma en lugar de una coma que acaba de encontrar un global.

+5

+1, esta es IMO una versión mucho mejor de mi respuesta. Y el último punto, sobre el uso del punto y coma en lugar de la coma, es exactamente la razón por la que nuestro equipo ha dejado de hacer comas: demasiados globales se introdujeron exactamente de esa manera. – Domenic

3

Usar una única declaración var en la parte superior de sus funciones es un patrón útil para adoptar. Tiene las siguientes ventajas:

  • proporciona un único lugar para buscar todas las variables locales necesarios para la función

  • evita errores lógicos cuando se utiliza una variable antes de que sea definida

  • Ayudas Recuerda declarar variables y, por lo tanto, minimizar las globales

  • Es menos código (escribir y transferir por el cable :)

  • JSLint le gusta este patrón

El patrón var solo se ve así:

function func() { 
    var a = 1, 
     b = 2, 
     sum = a + b, 
     myobject = {}, 
     i, 
     j; 

    // function body... 

} 

Para más información mirar there


La principal ventaja es que usted tiene todas las variables definidas al principio de su función, por lo que no terminará con una gran cantidad de variables globales desde vari ables declarado sin var, y su código no caerá debido a una instrucción de var equivocada (llamando a la variable antes de declararlo)

+0

¿A qué sección 2.2.5 se refiere? –

+3

Aparte de (4) y (5). los primeros 3 también se aplican a múltiples variables de línea única. Personalmente encuentro este patrón un dolor para mantener en funciones no triviales. – Raynos

+0

@Felix Kling lo siento, mi error, ha pasado por alto este enlace a la sección –

3

La única ventaja real es que ahorra un par de bytes por variable, lo que en un gran archivo JS puede agregar; recuerde que los archivos JS a menudo se envían por cable.

Personalmente, prefiero una sola var por línea.

+0

La var única parece ser también una excusa para no documentar las variables, aunque no debería ser así. –

4

No soporto todas las variables en una sola declaración porque la declaración de la variable puede estar muy lejos de donde realmente se usa. Sé todos los argumentos para ello, y ese cambio variable mueve todos los vars a la parte superior de la función de todos modos. Pero cuando veo una variable declarada en la parte superior de una función y no se usa para otras 20 líneas, me vuelve un poco loco, especialmente para las variables de índice de bucle

0

Además del tamaño de conexión por cable, probablemente también ayude al rendimiento del intérprete. De Professional Java Script for Web Developers:

Una sola instrucción puede completar varias operaciones más rápido que varias declaraciones, cada una realizando una sola operación. La tarea, entonces, es buscar declaraciones que se puedan combinar para disminuir el tiempo de ejecución de la secuencia de comandos general.

Continuó para recomendar la declaración de variables en una sola línea.

Cuestiones relacionadas