Hoisting no Javascript, como funciona?

Jean Carlos de Paula
2 min readJul 25, 2022

Se você já programou em Javascript, provavelmente já utilizou o hoisting, sabia? Mas, você sabe o que de fato é o hoisting e qual a sua utilização nos códigos?

Lançado a partir do ECMAScript 2015, o hoisting é uma característica do Javascript que permite com que você utilize variáveis e funções antes mesmo de declará-las, ou seja, é como se elas fossem “içadas” para o topo do código, mesmo que na prática isso não aconteça, já que isso ocorre porque elas elas são alocadas na memória durante a compilação do código.

E será que o hoisting funciona corretamente para todos os tipos de variáveis e funções? A resposta é NÃO!

Esse comportamento pode ser utilizado sem grandes problemas para variáveis globais do Javascript, aquelas declaradas com a palavra reservada VAR, e para funções de declaração, definidas pela palavra reservada FUNCTION, não sendo realizado para arrow functions, por exemplo.

Quer um exemplo de como funciona o hoisting? Olha só!

//Inicialização da variável antes de declará-la
nome = 'Jean';
var nome;//Chamada da função antes de declará-la
imprime(nome)
function imprime(nome){
console.log(nome)
}

O código acima pode ser executado sem problema algum. Mas, e se a variável nome fosse declarada utilizando a palavra reservada CONST, ou a função imprime fosse uma arrow function, sabe o que aconteceria? Bom, um ReferenceError seria lançado, que ocorre quando variáveis não inicializadas são referenciadas.

//Inicialização da variável antes de declará-la
nome = 'Jean';
let nome;//Chamada da função antes de declará-la
imprime(nome)
const imprime = nome => console.log(nome)

Erros que poderiam ser lançados:

ReferenceError: Cannot access 'nome' before initializationReferenceError: Cannot access 'imprime' before initialization

Por fim, e legal saber que o hoisting não ocorre com a inicialização das variáveis globais, somente com as suas declarações. Aqui vai mais um exemplo:

console.log('O meu nome é' + nome)nome = 'Jean';
var nome;

Nesse caso, visto que o console.log() é realizado antes da inicialização da variável, no terminal seria impresso a seguinte frase:

O meu nome é undefined

Quer entender um pouco mais sobre o hoisting e suas aplicações? Dê uma conferida na documentação oficial do Javascript!

--

--