O guia de Babel para o ES6 diz:
leté o novovar.
Aparentemente, a única diferença é o varescopo da função atual , enquanto o letescopo do bloco atual . Existem alguns bons exemplos nesta resposta .
Não vejo nenhum motivo para usar varno código ES6. Mesmo que você queira escopo uma dada variável para toda a função, você pode fazê-lo letcolocando a declaração na parte superior do bloco de funções, que é o que você deve fazer varpara indicar o escopo real. E se você deseja definir algo mais finamente em um forbloco ou algo assim, também pode fazer isso.
Então, meu instinto é parar de usar varcompletamente ao escrever o código ES6.
Minha pergunta é: estou errado sobre isso? Existe algum caso legítimo em varque seria preferível let?
letdeclaraçã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 vartorna mais claro do que simplesmente localizá-lo no topo.
varainda existe, é a compatibilidade com versões anteriores. Se não fosse por isso, eles teriam sido varcompletamente removidos , ou nunca introduzidos, letem vez disso, mudando a semântica varpara o que deveria ter sido o tempo todo.
varparecem pequenos para mim, e não o suficiente para garantir um terceiro tipo de variável que se destaca. Você pode definir um escopo letpara uma função inteira simplesmente colocando-a na parte superior da função, o que é muito mais claro do que escrever varem 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 leta 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 varparecem 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.
varcomo 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" .