O guia de Babel para o ES6 diz:
let
é o novovar
.
Aparentemente, a única diferença é o var
escopo da função atual , enquanto o let
escopo do bloco atual . Existem alguns bons exemplos nesta resposta .
Não vejo nenhum motivo para usar var
no código ES6. Mesmo que você queira escopo uma dada variável para toda a função, você pode fazê-lo let
colocando a declaração na parte superior do bloco de funções, que é o que você deve fazer var
para indicar o escopo real. E se você deseja definir algo mais finamente em um for
bloco ou algo assim, também pode fazer isso.
Então, meu instinto é parar de usar var
completamente ao escrever o código ES6.
Minha pergunta é: estou errado sobre isso? Existe algum caso legítimo em var
que seria preferível let
?
let
declaração no topo de uma função, acho óbvio que você pretendia colocá-la em escopo para toda a função. Eu não acho que usar o var
torna mais claro do que simplesmente localizá-lo no topo.
var
ainda existe, é a compatibilidade com versões anteriores. Se não fosse por isso, eles teriam sido var
completamente removidos , ou nunca introduzidos, let
em vez disso, mudando a semântica var
para o que deveria ter sido o tempo todo.
var
parecem pequenos para mim, e não o suficiente para garantir um terceiro tipo de variável que se destaca. Você pode definir um escopo let
para uma função inteira simplesmente colocando-a na parte superior da função, o que é muito mais claro do que escrever var
em um bloco (para que seja içada desse bloco para que você possa usá-lo fora do bloco) - esquisito). Ele alerta que, se você escopo let
a uma função, "é apenas a posição que sinaliza a diferença, em vez da sintaxe", mas acho que é uma coisa boa.
var
. os exemplos que ele apresenta para manter var
parecem inventados - e são baseados em graves erros de codificação. É muito melhor encontrar um erro e ser forçado a corrigi-lo do que usar as funções de linguagem que permitem escapar impune! O que vem a seguir, aconselhe a agrupar tudo em uma tentativa / captura para evitar falhas? O restante desse link é bom, mas não concordo com essa parte em particular.
var
como um indicador consciente de que essa variável deve ter escopo definido para toda a função pode ser uma convenção útil de "auto-documentação" .