Hoisting é o comportamento padrão do JavaScript de mover declarações ao topo.
As declarações de JavaScript são içadas
Em JavaScript, uma variável pode ser declarado depois de ter sido usado.
Em outras palavras; uma variável pode ser usado antes de ter sido declarada.
Exemplo 1 dá o mesmo resultado que no Exemplo 2:
exemplo 1
x = 5; // Assign 5 to x
elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x;
// Display x in the element
var x; // Declare x
Tente você mesmo " exemplo 2
var x; // Declare x
x = 5; // Assign 5 to x
elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x;
// Display x in the element
Tente você mesmo " Para entender isso, você tem que entender o termo "hoisting" .
Hoisting é o comportamento padrão do JavaScript de mover todas as declarações ao topo do escopo atual (para o topo do script atual ou a função atual).
JavaScript Initializations Não são içadas
JavaScript única talhas declarações, não inicializações.
O Exemplo 1 não dar o mesmo resultado que no Exemplo 2:
exemplo 1
var x = 5; // Initialize x
var y = 7; // Initialize y
elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x + " " + y; // Display x and y
Tente você mesmo " exemplo 2
var x = 5; // Initialize x
elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x + " " + y; // Display x and y
var y = 7; // Initialize y
Tente você mesmo " Faz sentido que y é indefinido no último exemplo?
Isso ocorre porque somente a declaração (var y), e não a inicialização (= 7) é içado ao topo.
Devido à hoisting , y tem sido declarada antes de ser utilizado, mas porque não inicializações são içadas, o valor de y é indefinido.
Exemplo 2 é o mesmo que escrever:
Exemplo
var x = 5; // Initialize x
var y; // Declare y
elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x + " " + y; // Display x and y
y = 7; // Assign 7 to y
Tente você mesmo " Declarar as variáveis no topo!
Hoisting é (para muitos desenvolvedores) um comportamento desconhecido ou esquecido de JavaScript.
Se um desenvolvedor não entende hoisting , os programas podem conter bugs (erros).
Para evitar erros, sempre declarar todas as variáveis no início de cada escopo.
Uma vez que esta é a forma como JavaScript interpreta o código, é sempre uma boa regra.
JavaScript no modo restrito não permite variáveis a serem usadas se não forem declarados.
Estudo "use strict" no próximo capítulo.