O ES2015 introduziu o conceito de Block scope que permite termos variáveis dentro de blocos { } que existem apenas dentro deste scope e não podem ser acedidas fora dele.
Simplificando:
Quando declaramos uma variável utilizando var dentro de um bloco, a mesma ficará disponível globalmente, enquanto let e const não. Isso permite um maior controlo sobre cada uma de nossas variáveis, evitando assim alterações de valores de maneira errada.
var a = 1; let b = 2; { console.log(a); console.log(b); } { var c = 3; let d = 4; } console.log(c); console.log(d);
No exemplo abaixo, onde temos uma função, o valor de car que foi declarado utilizando let, irá ser alterado de Audi para VW apenas dentro da função. O valor de truck que foi declarado como var será alterado de Volvo para Scania.
Em ambos os casos, este valor foi alterado apenas dentro da função, ou seja: ficou restrito ao seu scopo.
Então temos 2 variáveis de cada, cada uma a "viver" no seu escopo. Uma no global e outra no scopo da função.
let car = 'Audi'; var truck = 'Volvo'; let WhatsTheValue = () => { let car = 'VW'; var truck = 'Scania'; console.log('The "let car" inside is:', car); console.log('The "var truck" inside is:', truck); } WhatsTheValue(); console.log('The "let car" outside is:', car); console.log('The "var truck" outside is:', truck);
No próximo exemplo, o valor de car é alterado de Audi para VW, como acontecia anteriormente, e o valor de truck também irá alterar de Volvo para Scania, mas repare que agora temos o mesmo valor no log inside e outside para a variável truck.
Diferente de quando utilizamos uma função, utilizando apenas { } o let manteve o seu comportamento, enquanto var passou a subscrever a variável do scopo global.
Neste caso deixamos de ter 2 variáveis de cada e passamos a ter 2x car e apenas uma truck.
let car = 'Audi'; var truck = 'Volvo'; { let car = 'VW'; var truck = 'Scania'; console.log('The "let car" inside is:', car); console.log('The "var truck" inside is:', truck); } console.log('The "let car" outside is:', car); console.log('The "var truck" outside is:', truck);
Utilizar var não é errado, de todo, mas como o let nos permite um maior controlo sobre onde realmente estão nossas variáveis, em muitos casos é recomendado na sua utilização, de maneira a evitar bugs porque alteramos o valor de uma variável que não era suposto ser alterada.
Top comments (0)