Escopos no JavaScript
Todo mundo sabe que uma variável local é... local:
function(){ var i = 0; } alert(i); // não funciona
Mas e isso?
if (algumaCoisa){ var i = 0; } alert(i);
Uma variável declarada dentro do if
é visível fora dele? Sim!
JavaScript só tem escopo de função (e o escopo global). Não temos escopo de bloco. Ou seja, o if
não define um escopo isolado.
Cuidado pra isso não te atrapalhar em alguns cenários. Por exemplo, dois fors simples:
for (var i = 0; i < 10; i++) { ... }
for (var i = 10; i > 0; i--) { ... }
Ambos estão mexendo na mesma variável i
, afinal o for
também não define um escopo. Temos que tomar cuidado pra não fazer alguma besteira.
O novo ES6 define, FINALMENTE, escopo de bloco na linguagem. É com a palavra chave let
:
if (algumaCoisa){ let i = 0; } alert(i);
Bom saber, mas o suporte ainda é fraco nos navegadores.
Quer fugir de outras enrascadas JavaScript e facilitar o seu dia a dia no front-end? Receba 10 dicas e boas práticas do expert Sérgio Lopes, uma por dia: