O que é Hoisting?
Hoisting é o evento do Javascript no qual uma variável é "içada" até o topo do seu escopo (no caso, da função).
Veremos o exemplo:
//Como é escrito:
var x = 2;
//global
function funcao() {
//local
console.log(x);
var x = 3;
console.log(x);
} funcao();
Por que esse comportamento? Por conta do hoisting. Apesar de ser escrito daquela maneira, a declaração da variável (mas não a atribuição do seu valor) sobe para o topo da função. A seguir, é mostrada uma representação de como o Javascript lê essa mesma função:
var x = 2;
//global
function funcao() {
//variável "levantada"
var x;
console.log(x); //undefined
x = 3;
console.log(x); //3
}
Por isso que o primeiro log é dado como undefined! Vamos entender escopo um pouco melhor no próximo tópico.