English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial básico do JavaScript

Objeto do JavaScript

Função do JavaScript

HTML DOM do JS

BOM do navegador JS

Tutorial básico de AJAX

Manual de referência do JavaScript

Hoisting do JavaScript

No JavaScript, independentemente de onde estejam definidos, todas as declarações de variáveis e funções serão movidas ou elevadas para o topo do escopo atual. Isso é o comportamento padrão do interpretador do JavaScript, conhecido comoelevamento (hoisting).

Elevamento de função (Hoisting)

As funções definidas com declaração de função são automaticamente elevadas.

Isso significa que podem ser chamadas antes de serem definidas.

// Chamar a função antes da declaração
greet();
function greet() {
  document.getElementById("output").innerHTML = "Hello World";
}
Teste e veja‹/›

Como você vê, antes de definirmos, já chamamosgreet()função, mas o código ainda é válido. Isso é porque a declaração da função é automaticamente elevada para o topo no fundo.

O elevamento é o comportamento padrão do JavaScript de mover as declarações para o topo.

O JavaScript apenas eleva as declarações

O JavaScript apenas eleva as declarações, não a inicialização. Se declarar e inicializar uma variável após usá-la, o valor será incerto.

document.write(num);  // undefined 
var num;
num = 50;
Teste e veja‹/›

Se declarar uma variável após usá-la, mas inicializá-la antes, ela retornará esse valor:

num = 50;
document.write(num);  // 50
var num;
Teste e veja‹/›

usarletouconstVariáveis e constantes não declaradas.

Inicialização do JavaScript não elevada

O JavaScript apenas eleva as declarações, não a inicialização.

Os seguintes dois exemplos produzem resultados diferentes:

Exemplo1:
var x = 1;   // Inicializar x
var y = 2;   // Inicializar y
document.write(x + " " + y); // 1 2
Teste e veja‹/›
Exemplo2:
var x = 1;   // Inicializar x
document.write(x + " " + y); // 1 undefined
var y = 2;   // Inicializar y
Teste e veja‹/›

emExemplo2noApenas a declaração (var y) e não a inicialização (=) 2levantado para o topo.

Devido ao Hoisting, y foi declarado antes de ser usado, mas devido à falta de inicialização de Hoisting, o valor de y não está definido.

O exemplo acima é implicitamente entendido como:

var x; // Declarar x
var y; // Declarar y
// Fim do Hoisting.
x = 1; // Inicializar x
document.write(x + " " + y);  // 1 undefined
y = 2; // Inicializar y
Teste e veja‹/›

Sempre declare variáveis no topo

Hoisting é um comportamento desconhecido ou ignorado do JavaScript.

Se você não entender o Hoisting, o programa pode conter erros.

Para evitar erros, declare sempre todas as variáveis no início de cada escopo.

Atenção:Se não declarar variáveis, o JavaScript em modo estrito não permite o uso de variáveis.

Você saberá mais sobre "use strict" no próximo capítulo.