Içamento JavaScript
O içamento é o comportamento padrão do JavaScript de mover as declarações para o topo.
Declarações JavaScript são içadas
Em JavaScript, uma variável pode ser declarada após ser usada.
Em outras palavras; uma variável pode ser usada antes de ser declarada.
O Exemplo 1 dá o mesmo resultado que o 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
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
Para entender isso, você tem que entender o termo "içamento".
O içamento é o comportamento padrão do JavaScript de mover todas as declarações para o topo do escopo atual (para o topo do script atual ou da função atual).
As palavras-chave let e const
Variáveis definidas com let
e const
são içadas para o topo do bloco, mas não inicializadas .
Significado: O bloco de código está ciente da variável, mas não pode ser usado até que seja declarado.
Usar uma let
variável antes de ser declarada resultará em um arquivo
ReferenceError
.
A variável está em uma "zona morta temporal" desde o início do bloco até ser declarada:
Exemplo
Isso resultará em umReferenceError
:
carName = "Volvo";
let carName;
Usar uma const
variável antes de ser declarada é um erro de sintaxe, então o código simplesmente não será executado.
Exemplo
Este código não será executado.
carName = "Volvo";
const carName;
Leia mais sobre let e const em JS Let/Const .
As inicializações de JavaScript não são içadas
JavaScript apenas eleva declarações, não inicializações.
O Exemplo 1 não dá o mesmo resultado que o 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
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
Faz sentido que y seja indefinido no último exemplo?
Isso ocorre porque apenas a declaração (var y), não a inicialização (=7) é elevada ao topo.
Por causa do içamento, y foi declarado antes de ser usado, mas como as inicializações não são içadas, o valor de y é indefinido.
O 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
Declare suas variáveis no topo!
O içamento é (para muitos desenvolvedores) um comportamento desconhecido ou negligenciado do JavaScript.
Se um desenvolvedor não entende de içamento, os programas podem conter bugs (erros).
Para evitar bugs, sempre declare todas as variáveis no início de cada escopo.
Como é assim que o JavaScript interpreta o código, é sempre uma boa regra.
JavaScript no modo estrito não permite que variáveis sejam usadas se não forem declaradas.
Estude "use strict" no próximo capítulo.