Um detalhe sobre o var
: nem sempre ele cria a variável no escopo global. Dentro de uma função, o escopo fica restrito àquela função. Exemplo:
function f() {
var x = 1;
console.log('dentro da função', x);
}
f(); // imprime "dentro da função 1"
console.log('fora da função', x); // ReferenceError: x is not defined
Note que x
não existe fora da função, e dá erro ao tentar acessá-la.
Outro detalhe é que o var
permite a "re-declaração", sobrescrevendo o anterior. Já o let
cria outra variável para cada escopo:
var x = 1;
let y = 2;
if (x > 0) {
var x = 3;
let y = 4;
console.log(x, y); // 3 4
}
console.log(x, y); // 3 2
Repare que dentro do if
, a alteração feita em x
também o afetou fora deste bloco. Já o let
criou na verdade outra variável (com o mesmo nome y
), tendo somente o bloco do if
como escopo. Por isso a variável y
externa continua inalterada.
Existem outras diferenças e detalhes importantes, ver mais aqui e claro, na documentação (aqui, aqui e aqui).