En JavaScript, es posible declarar múltiples variables como esta:
var variable1 = "Hello World!";
var variable2 = "Testing...";
var variable3 = 42;
...o así:
var variable1 = "Hello World!",
variable2 = "Testing...",
variable3 = 42;
¿Es un método mejor / más rápido que el otro?
javascript
variables
coding-style
performance
declaration
Steve Harrison
fuente
fuente
Respuestas:
La primera forma es más fácil de mantener. Cada declaración es una sola declaración en una sola línea, por lo que puede agregar, eliminar y reordenar fácilmente las declaraciones.
Con la segunda forma, es molesto eliminar la primera o la última declaración porque contienen la
var
palabra clave y el punto y coma. Y cada vez que agrega una nueva declaración, debe cambiar el punto y coma en la línea anterior a una coma.fuente
Además de la capacidad de mantenimiento, la primera forma elimina la posibilidad de creación de variables globales accidentales:
Mientras que la segunda forma es menos indulgente:
fuente
var variable1 = "Hello World!", variable2 = "Testing...", variable3 = 42;
. Un desaparecido,
se bloqueará, pero estoy de acuerdo en que es arriesgadoPossible Fatal Error
si extraño un coma, ¡hurra por mí!Es común usar una
var
declaración por ámbito para la organización. La forma en que todos los "ámbitos" siguen un patrón similar que hace que el código sea más legible. Además, el motor los "eleva" a todos a la cima de todos modos. Por lo tanto, mantener sus declaraciones juntas imita lo que realmente sucederá más de cerca.fuente
var
declaración. Todo lo contrario es cierto. vea la documentación y este ejemploEs mucho más legible al hacerlo de esta manera:
Pero ocupa menos espacio y líneas de código de esta manera:
Puede ser ideal para ahorrar espacio, pero deje que los compresores JavaScript lo manejen por usted.
fuente
Tal vez asi
Excepto cuando se cambia la primera o la última variable, es fácil de mantener y leer.
fuente
Es solo una cuestión de preferencia personal. No hay diferencia entre estas dos formas, aparte de unos pocos bytes guardados con el segundo formulario si elimina el espacio en blanco.
fuente
ECMAScript6 introdujo la asignación de desestructuración que funciona bastante bien:
[a, b] = [1, 2]
a
será igual1
yb
será igual2
.fuente
let [aVar, bVar, cVar, xVar, yVar, zVar] = [10, 20, 30, 40, 50];
Entonces, personalmente no lo recomiendo.es más legible que:
Pero ellos hacen lo mismo.
fuente
var<space>
, es<space><space><space><space>
var<space>
ovar<tab>
vs<tab>
. Todavía en gran parte discutible.Use la asignación de Desestructuración de ES6 : Descomprimirá valores de matrices o propiedades de objetos en variables distintas.
fuente
Mi único pero esencial uso de coma está en un bucle for:
Fui aquí para buscar si esto está bien en JavaScript.
Incluso viéndolo funcionar, quedó la pregunta de si n es local para la función.
Esto verifica que n es local:
Por un momento no estaba seguro, cambiando de idioma.
fuente
Aunque ambos son válidos, usar el segundo desalienta a los desarrolladores inexpertos de colocar declaraciones var por todas partes y causar problemas de elevación. Si solo hay una var por función, en la parte superior de la función, entonces es más fácil depurar el código como un todo. Esto puede significar que las líneas donde se declaran las variables no son tan explícitas como a algunos les gustaría.
Siento que la compensación vale la pena, si eso significa destetar a un desarrollador de dejar caer 'var' en cualquier lugar que desee.
La gente puede quejarse de JSLint, yo también lo hago, pero gran parte está orientado no a solucionar problemas con el idioma, sino a corregir los malos hábitos de los codificadores y, por lo tanto, a prevenir problemas en el código que escriben. Por lo tanto:
"En los idiomas con alcance de bloque, generalmente se recomienda declarar las variables en el sitio de primer uso. Pero debido a que JavaScript no tiene alcance de bloque, es más inteligente declarar todas las variables de una función en la parte superior de la función. Es recomienda que se use una sola declaración var por función ". - http://www.jslint.com/lint.html#scope
fuente
Creo que es una cuestión de preferencia personal. Prefiero hacerlo de la siguiente manera:
fuente
Otra razón para evitar la versión de declaración única ( var simple ) es la depuración. Si se lanza una excepción en cualquiera de las líneas de asignación, el seguimiento de la pila muestra solo una línea.
Si tenía 10 variables definidas con la sintaxis de coma, no tiene forma de saber directamente cuál fue el culpable.
La versión de declaración individual no sufre de esta ambigüedad.
fuente
El concepto de "Cohesión sobre el acoplamiento" se puede aplicar de manera más general que solo objetos / módulos / funciones. También puede servir en esta situación:
El segundo ejemplo que sugirió el OP ha juntado todas las variables en la misma declaración, lo que hace imposible tomar una de las líneas y moverla a otro lugar sin romper cosas (acoplamiento alto). El primer ejemplo que dio hace que las asignaciones variables sean independientes entre sí (bajo acoplamiento).
"El bajo acoplamiento a menudo es un signo de un sistema informático bien estructurado y un buen diseño, y cuando se combina con una alta cohesión, respalda los objetivos generales de alta legibilidad y facilidad de mantenimiento".
http://en.wikipedia.org/wiki/Coupling_(computer_programming)
Así que elige el primero.
fuente
Una publicación antigua, lo sé, pero para agregar un pequeño detalle de perspectiva para los compañeros de Google:
El problema de mantenibilidad puede superarse fácilmente con un poco de formato, como tal.
Utilizo este formato estrictamente como una cuestión de preferencia personal. Me salteo este formato para declaraciones individuales, por supuesto, o donde simplemente engulle las obras.
fuente
Creo que antes de comenzar a usar ES6, el enfoque con declaración de var única no era bueno ni malo (en caso de que tenga linters y
'use strict'
. Fue realmente una preferencia de sabor. Pero ahora las cosas cambiaron para mí. Hay mis pensamientos a favor de la declaración multilínea :Ahora tenemos dos nuevos tipos de variables y quedamos
var
obsoletos. Es una buena práctica usarlo enconst
todas partes hasta que realmente lo necesitelet
. Muy a menudo, su código contendrá declaraciones de variables con asignación en el medio del código, y debido al alcance del bloque, con bastante frecuencia moverá las variables entre bloques en caso de pequeños cambios. Creo que es más conveniente hacer eso con declaraciones multilínea.La sintaxis de ES6 se volvió más diversa, obtuvimos destructores, cadenas de plantillas, funciones de flecha y asignaciones opcionales. Cuando usa todas esas características con declaraciones de var individuales, perjudica la legibilidad.
fuente
Creo que la primera forma (varios vars) es mejor, ya que de lo contrario puede terminar con esto (de una aplicación que usa Knockout), que es difícil de leer en mi opinión:
fuente