Front End

10 mar, 2015

O que é o let no JavaScript (ES6)?

Publicidade

Uma das primeiras coisas que se nota olhando um código do tal ES6, é que a maioria dos códigos usam um ‘let’. Basicamente, ele é a nova forma de declarar variáveis no JavaScript, em que todas as chaves criam um novo escopo para as variáveis; isso é, ele funciona da mesma forma que o var já funciona, porém as variáveis que estão dentro de qualquer chaves {…} não são acessíveis fora delas. Daqui há 10 anos, você muito provavelmente só usará o let, então dê atenção para isso.

Obs.: leia também sobre o const para declaração de constantes no JavaScript

Você pode testar esses códigos no Firefox. Aqui estou usando a versão 34.

Fica assim:

if (!!document.body) {
  let yeah = 'Uau!';
 
  alert(yeah);
}
 
console.log(yeah);

Rodando no Firefox, olha o resultado:

Screen-Shot-2014-12-20-at-15.44.42

Logo depois do if (que sempre dá true), a variável declarada dentro do if não está disponível – diz que é undefined. Letzinho sem vergonha, hein?! rs

Diferente do ‘var’:

if (!!document.body) {
  var yeah = 'Uau!';
 
  alert(yeah);
}
 
console.log(yeah);

O resultado é o a seguir. Veja que logo depois do if, aparece um “Uau!”.

Screen-Shot-2014-12-20-at-15.46.07

A variável “yeah” só é acessível dentro do bloco que as chaves fazem. O exemplo mais legal que acho que dá para mostrar aqui com o let é com o for, no for nós sempre usamos uma variável i, só que essa variável i sempre é uma variável indesejada, usando o let a variável i ficará apenas no escopo do for e não ficará enchendo o saco do nosso código fora do for, assim:

for (let i = 0; i <= 2; i += 1) {
    console.log(i);
}
 
console.log(i);

E o console.log dá um erro porque i é undefined, ou seja, só fica lá dentro do for. Maravilha, né?!

Bom, é isso que eu tinha para dizer sobre o let. Já existem vários artigos em português falando da tal “block scope”, que você pode usar para melhorar seus estudos. Recomendo dar uma lida na MDN e no ES6Rocks, mas resolvi escrever porque é escrevendo que se aprende, né?!