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:
Escopos no JavaScript
Todo mundo sabe que uma variável local é… local:
Mas e isso?
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:
Ambos estão mexendo na mesma variável
i
, afinal ofor
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
: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
Compartilhe:
Sérgio Lopes
Próximo ArtigoConverter int para String em Java