JavaScript - As variáveis e o Hoisting

 Hoje vamos apresentar o conceito de hoisting na linguagem JavaScript.

Neste artigo, o ambiente usado para testar o código JavaScript requer a instalação dos seguintes recursos:

JavaScript - Variáveis

Em JavaScript, existe o conceito de Hoisting aplicado a variáveis.

Assim, em JavaScript toda variável é movida, elevada ou içada ao topo do seu contexto de execução.

Esse mecanismo move as variáveis para o topo do seu escopo antes da execução do código.

Dessa forma, em JavaScript uma variável pode ser declarada depois que ela foi usada, e pode ser usada antes de ser declarada.

Veja como funciona:

No código abaixo eu estou atribuindo um valor à variável minhaVariavelLouca, e, somente depois estou declarando a variável:

Percebeu que eu usei a variável antes de declará-la !!!

Mas esse mecanismo só funciona para declarações e não para inicializações. Veja:

Agora estou inicializando a variável x, e , estou usando a variável y, sem declará-la; estou fazendo apenas a inicialização de y (var y=20) logo a seguir:

Agora o valor de y é undefined pois não estou declarando y, estou apenas inicializando a variável.

Isso ocorre porque somente a declaração (var y), e não a inicialização (= 20) é içada para o topo.

Por causa do içamento, y foi declarado antes de ser usado, mas como as inicializações não são içadas, o valor de y é undefined.

Não quer ter dor de cabeça com esse conceito atípico da linguagem JavaScript ?

Conselho de amigo : "Declare todas as suas variáveis no ínicio do escopo"

Ou você pode fazer o seguinte:

Utilizar o strict mode que não permite usar variáveis não declaradas. Veja funcionando...

Alerta : Esse recurso faz parte da ECMAScript 5 e é ignorado por versões anteriores do JavaScript.

Ou ainda...

Na ECMAScript 6 podemos declarar variáveis com escopo de bloco usando a palavra-chave let.

Assim a palavra-chave let trás para JavaScript o escopo de bloco. Se você tentar acessar  uma variável declarada com let fora do seu escopo vai obter o erro:  Uncaught ReferenceError: escopoBloco is not defined

Mas, cuidado !!!, pois, esse recurso não é suportado por todas as versões dos navegadores.

Assim, variáveis declaradas com var podem ser usadas antes da sua declaração e variáveis criadas com let só podem ser usadas após sua declaração (Elas são elevadas mas não são inicializadas).

"Eu sou o Alfa e o Ômega, o princípio e o fim, diz o Senhor, que é, e que era, e que há de vir, o Todo-Poderoso. "
Apocalipse 1:8

  • Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

    Quer migrar para o VB .NET ?

    Quer aprender C# ??

    Quer aprender os conceitos da Programação Orientada a objetos ?

    Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

      Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

    Referências:


    José Carlos Macoratti