Saber que o Hoisting ocorre te ajuda a entender melhor como o Javascript lida com variáveis, e pode evitar alguns bugs bem misteriosos!
Nesse artigo, você irá aprender o que é o Hoisting e outros termos importantes relacionados a ele. Vamos lá!?
O que é o Hoisting?
O Hoisting ocorre quando seu código Javascript é compilado : Basicamente, todas as declarações de variáveis são movidas para o topo de seu escopo local (se foram declaradas dentro de uma função, por exemplo) ou para o topo do escopo global (se foram declaradas fora de uma função). Declaração de funções e classes também são movidas para o topo e ficam acima das declarações das variáveis.
Exemplos:
![](/_next/image?url=https%3A%2F%2Fnh-site-strapi-bucket.s3.amazonaws.com%2F1_1_353892f61f.png&w=3840&q=75)
Podemos ver que a função foi executada normalmente mesmo que ela tenha sido chamada antes da sua declaração.
![](/_next/image?url=https%3A%2F%2Fnh-site-strapi-bucket.s3.amazonaws.com%2F2_1_20770ef7b2.png&w=3840&q=75)
A execução do código acima tem como resposta “undefined” por que apenas a declaração das variáveis são movidas para o topo e não a sua inicialização.
![](/_next/image?url=https%3A%2F%2Fnh-site-strapi-bucket.s3.amazonaws.com%2F3_1_3f37a8fdd5.png&w=3840&q=75)
Aqui tudo ocorre como o esperado, após acontecer o hoisting o código é executado da seguinte maneira:
![](/_next/image?url=https%3A%2F%2Fnh-site-strapi-bucket.s3.amazonaws.com%2F4_1_a566085a29.png&w=3840&q=75)
Quais são as diferenças entre let, const e var em termos de hoisting:
a) Var
O var pode ser declarado sem ser inicializado e está disponível fora do seu escopo.
![](/_next/image?url=https%3A%2F%2Fnh-site-strapi-bucket.s3.amazonaws.com%2F5_337fafb873.png&w=3840&q=75)
b) Let
O let pode ser declarado sem ser inicializado mas não está disponível fora do seu escopo.
![](/_next/image?url=https%3A%2F%2Fnh-site-strapi-bucket.s3.amazonaws.com%2F6_aa094aa012.png&w=3840&q=75)
C) Const
O const não pode ser declarada sem ser inicializada e não está disponível fora do ser escopo.
![](/_next/image?url=https%3A%2F%2Fnh-site-strapi-bucket.s3.amazonaws.com%2F7_e49568e960.png&w=3840&q=75)