Escopos no JavaScript

Sérgio Lopes
Sérgio Lopes

Compartilhe

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

Sérgio Lopes
Sérgio Lopes

Sérgio é diretor e líder do time de diversos times no Grupo Caelum, formado em Ciência da Computação pela USP. É reconhecido por sua atuação em Front-end, Performance, Mobile e Arquitetura de software e tem vasta experiência com ensino, tanto presencial quanto online. Gerencia os projetos internos da empresa e atua na definição de rumos dos produtos e da empresa em geral.

Veja outros artigos sobre Front-end