Quais são as diferenças e / ou vantagens, se houver, de usar vírgulas ao declarar um grupo de variáveis em vez de ponto e vírgula.
Por exemplo:
var foo = 'bar', bar = 'foo';
versus
var foo = 'bar';
var bar = 'foo';
Eu sei que se você especificar a var
palavra-chave na primeira variável no primeiro exemplo, ela persiste em todas as variáveis, portanto, ambas produzem o mesmo resultado final em relação ao escopo. É apenas preferência pessoal ou há um benefício de desempenho em fazer isso de qualquer maneira?
fonte
Depois de ler Crockford e outros, comecei a encadear minhas variáveis exclusivamente com vírgulas. Mais tarde, fiquei realmente irritado com o depurador Chrome DevTools, que não parava nas definições de variáveis com vírgulas. Para o depurador, as definições de variáveis encadeadas com vírgulas são uma única instrução, enquanto várias instruções var são várias instruções nas quais o depurador pode parar. Portanto, voltei de:
Para:
Até agora, acho a segunda variante muito mais limpa, sem mencionar sua vantagem de resolver o problema do depurador.
O argumento "menos código através do fio" não é convincente, pois existem minificadores.
fonte
debugger
lá, depois adiciono outrovar
e continuo encadeando-os por vírgula. Então, quando termino a depuração, volto e removo odebugger
e o extravar
.Eu prefiro a
var-per-variable
notação:porque a outra
comma-instead-of-another-var
notação tem estas três deficiências:1. Difícil de manter
Considere este código:
Mas ei, o que o mogrify faz? Vamos imprimir b para descobrir:
quebra coisas
2. Difícil de ler
A var no início da linha comunica claramente que haverá uma nova variável iniciada.
O que diabos está
c = 3
fazendo aí certo?3. Não consistente
Considere isto:
A
var-per-variable
cada declaração segue a mesma estrutura. Comcomma-instead-of-another-var
a primeira variável é declarada de maneira diferente das outras. Se você decidir, digamos, mover a primeira variável dentro de um ciclo for, você terá que adicionar var no meio das declaraçõesAlém da preferência, parece que a maioria dos projetos notáveis usa a
var-per-variable
notaçãofonte
Concordo com os outros respondentes que se trata principalmente de uma questão de estilo pessoal. Mas para trazer uma opinião "autorizada" para a discussão, isso é o que Douglas Crockford diz no site da popular ferramenta JSLint :
fonte
let
construção) faz tem escopo de bloco.let
pode ser usado em mais do que apenas Mozilla JS ( veja aqui ). Faz parte da especificação ES6 , mas a maioria dos navegadores ainda está trabalhando na implementação de recursos do ES6.Como outros notaram, é uma preferência de estilo. O JSLint pode dizer para você ter apenas um
var
por função (se você usar as "Partes boas"). Portanto, se estiver usando JSLint para verificar seu código (não é uma má idéia, IMHO), você acabará usando o primeiro formato mais do que o último.Por outro lado, o mesmo autor, Douglas Crockford , diz para colocar cada variável em sua própria linha em suas convenções de codificação . Portanto, você pode querer desmarcar a
var
caixa de seleção "Todos um por função" no JSLint se for usá-lo. ;-)fonte
var
declarações separadas ou encadeados com vírgulas.)Não acho que haja qualquer diferença perceptível, no que me diz respeito é apenas preferência pessoal.
Eu odeio ter várias declarações var, então geralmente faço:
Como é mais curto e indiscutivelmente mais legível, nenhum
var
ruído para olhar.fonte
var one, two, three four;
muito rápido. Adicionar linhas por causa das linhas em Javascript pode ser perigoso (os intérpretes JS podem inserir os seus próprios;
- se você não antecipar isso, você encontrará rapidamente os efeitos colaterais. Além disso, o líder,
me incomoda , palavras-chave obtendo sua própria linha me;
incomodam, a própria linha me incomoda. Você é pago por linha?var
declaração. (Embora eu concorde com você sobre as vírgulas iniciais e sobrevar
o ponto-e-vírgula final estar em suas próprias linhas - todos os três me incomodam também.)Como não vejo nenhuma referência a ele, aqui está um link para a especificação ECMA-262, que é a especificação subjacente para JavaScript. A gramática dessa página diz:
O que você pode deduzir disso é usar vírgulas ou não, não importa. De qualquer forma, ele acaba sendo analisado como um
VariableDeclaration
e é tratado exatamente da mesma forma. Não deve haver diferença em como o mecanismo de script trata as duas declarações. As únicas diferenças seriam aquelas já mencionadas em outras respostas - economizando mais espaço e diferenças praticamente imensuráveis na quantidade de tempo que leva para aplicar a gramática para encontrar todos osVariableDeclarations
quando o script é compilado.fonte
O primeiro salva alguns caracteres - portanto, há uma economia muito pequena em termos do tamanho do arquivo JS e, portanto, do consumo de largura de banda. A única vez que isso se tornaria perceptível seria em casos extremos.
fonte
Eu prefiro a segunda versão (cada uma tem a sua
var
). Acho que é porque venho de uma formação C ++. Em C ++, você pode declarar variáveis como no primeiro exemplo, mas é desaprovado (facilmente leva a erros quando você tenta criar ponteiros dessa forma).fonte
Se você estiver minimizando seu javascript, há uma grande vantagem:
torna-se
Enquanto que
torna-se
São três instâncias adicionais de
var
, que podem aumentar com o tempo.Consulte a série de artigos "A List Apart" "Better Javascript Minification" Parte 1 e Parte 2
fonte
var
compactando o gzip , os repetidos s não aumentarão significativamente o tamanho do arquivo compactado (se eu entendi o gzipamento corretamente).