Function Hoisting


Function Hoisting é o comportamento no qual declarações de funções são “elevadas” para o topo de seus escopos durante a fase de compilação do JavaScript. Esse processo permite que as funções sejam chamadas antes mesmo de serem declaradas no código.

falaOi();
 
function falaOi() {
  console.log("Oi");
}

No exemplo acima, a função falaOi é chamada antes de ser declarada. Isso é possível devido ao hoisting, que eleva a declaração da função para o topo do escopo durante a fase de compilação. Como resultado, quando o código é executado, a função já foi “elevada” e pode ser chamada em qualquer ponto do escopo.

Atenção

É importante observar que o hoisting só ocorre com declarações de funções (function declarations) e não com expressões de função (function expressions). Portanto, ao usar uma expressão de função, o hoisting não ocorrerá da mesma forma.

// Hoisting NÃO ocorre para a expressão de função
falaOi(); // TypeError: falaOi is not a function
 
var falaOi = function() {
  console.log("Oi");
};

No exemplo acima, ocorrerá um erro (TypeError: falaOi is not a function) porque a expressão de função não é “elevada” da mesma forma que a declaração de função. Nesse caso, a variável falaOi é içada (hoisted), mas seu valor inicial é undefined antes da atribuição da função, resultando no erro ao tentar chamá-la.

Referências