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:

Cadastre-se na série Boas práticas de JavaScript

Fique por dentro

(Última atualização em: 23 de outubro de 2015)

Próximo ArtigoConverter int para String em Java