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.