Continuando os escritos pontuais da linguagem JavaScript, hoje vou escrever sobre o “Hoisting”.
Antes de continuar é importante avisar da necessidade de conhecer o conceito de escopos global e local.
Na literatura é comum dizer que o Hositing é um processo no qual as declarações das variáveis e das funções são movidas para o topo do código durante o processo de compilação/interpretação. A imagem a seguir tentar mostrar como seria sob essa visão:
Na verdade, não é bem assim que ocorre, trata-se apenas de uma maneira didática de compreender o processo.
De acordo com o MDN, “as declarações de variável e função são colocadas na memória durante a fase de compilação, mas permanecem exatamente onde você as digitou no seu código.”.
Ou seja, todas as variáveis e funções com escopo global são alocadas na memória, sem que sejam retiradas das suas posições no código.
É como se o compilador/interpretador mapeasse todas as declarações das funções e variáveis.
O levantamento como dizemos acima não ocorre, como disse, é uma maneira didática de compreender o processo.
Impera salientar que ocorre apenas com as funções e variáveis com escopo global. Declarações com escopo local não sofrem o “Hoisting”.
Vamos para um exemplo de código para ver suas implicações práticas:
console.log(a) // undefined
var a = 1;
console.log(a) // 1
Veja que, apesar que a variável ‘a’ tenha sido declarada após o primeiro ‘console.log()’, o resultado na tela foi ‘undefined’, ou seja, para ela apenas não foi definido um valor.
Outro exemplo com ‘let’:
console.log(a) // ReferenceError: a is not defined
let a = 1;
console.log(a)
Agora quando declaramos a variável por meio do ‘let’ é retornado um erro de referência. É acusado que a variável não foi definida.
Isso acontece em razão do escopo local de ‘let’, assim, não sofre o Hoisting.
Essa é a diferença, por meio do processo de Hoisting, mesmo que a declaração seja posterior, o compilador/interpretador já a conhece, e apenas devolve que não foi inicializado nenhum valor para ela.
Por outro lado, quando a declaração tem natureza de escopo local. A sua chamada antes da declaração devolve um erro de referência: acusa-se que a variável ou função não foi declarada.
Top comments (0)