javascript #3: Hoisting

Olá pessoal, tudo certo?

O assunto de hoje é um detalhe do javascript que muitas vezes pode passar despercebido e causar certos erros se não for tomada a devida precaução durante o desenvolvimento. A ideia é mostrar como funciona o hoisting presente no javascript e também mostrar possíveis erros e soluções.

Javascript tem um comportamento diferente de linguagens como C# ou Java quanto ao escopo de variáveis em blocos if, for, while, entre outros. Em C#/Java uma variável declarada dentro de um for é visível apenas dentro do bloco do for, em javascript a variável é visível em todo o escopo em que o bloco está contido.

Este comportamento ocorre devido ao hoisting. Através deste, todas as declarações de variáveis (var) e funções (function) são movidas para o topo do escopo em que estão presentes. Isso significa que o parser identifica as declarações e as move para o topo do bloco ao invés de mantê-las dentro do bloco em que são declaradas.

Erros

Um erro que pode ocorrer é, um conflito com uma variável global como exibido abaixo.

Criei um fiddle para este exemplo.

O possível erro pode ser evitado seguindo boas práticas do desenvolvimento em javascript. Uma delas é citada por Douglas Crockford, de sempre declarar as variáveis no início dos métodos. Outra é, evitar o uso de variáveis globais, e em caso de uso, usar window. para indicar que a variável é global.

Também há um fiddle para este exemplo. O exemplo é o mesmo que o anterior, no entanto o código exibe “10 : 10” ao invés de “undefined : undefined”.

Referências

Javascript Garden
Douglas Crockford

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s