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.