
O ES2015 introduziu o conceito deBlock 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 utilizandovar dentro de um bloco, a mesma ficará disponível globalmente, enquantolet econst não. Isso permite um maior controlo sobre cada uma de nossas variáveis, evitando assim alterações de valores de maneira errada.
vara=1;letb=2;{console.log(a);console.log(b);}{varc=3;letd=4;}console.log(c);console.log(d);
No exemplo abaixo, onde temos uma função, o valor de car que foi declarado utilizandolet, irá ser alterado de Audi para VW apenas dentro da função. O valor de truck que foi declarado comovar 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.
letcar='Audi';vartruck='Volvo';letWhatsTheValue=()=>{letcar='VW';vartruck='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 deAudi paraVW, 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{ } olet manteve o seu comportamento, enquantovar passou a subscrever a variável do scopo global.
Neste caso deixamos de ter 2 variáveis de cada e passamos a ter 2xcar e apenas umatruck.
letcar='Audi';vartruck='Volvo';{letcar='VW';vartruck='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);
Utilizarvar não é errado, de todo, mas como olet 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)
For further actions, you may consider blocking this person and/orreporting abuse