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

Основы JavaScript

Объекты JavaScript

Функции JavaScript

JS HTML DOM

JS браузер BOM

Основы AJAX

Руководство по JavaScript

Hoisting в JavaScript

В JavaScript все объявления переменных и функций, независимо от места их определения, перемещаются или поднимаются в верхнюю часть текущей области видимости. Это поведение интерпретатора JavaScript, называемоеhoisting(подъем).

Подъем функции (Hoisting)

Функции, определенные с помощью объявления функции, автоматически поднимаются.

Это означает, что их можно вызывать до их определения.

// Вызов функции до объявления
greet();
function greet() {
  document.getElementById("output").innerHTML = "Hello World";
}
Проверьте, посмотрите <</>',

Как вы видите, мы уже вызвалиgreet()функция, но код по-прежнему действует. Это потому, что объявления функций автоматически поднимаются в верхнюю часть.

Подъем - это поведение по умолчанию JavaScript, при котором объявления перемещаются в верхнюю часть.

JavaScript поднимает только объявления

JavaScript поднимает только объявления, но не инициализацию. Если переменную объявляют и инициализируют после использования, значение будет неопределенным.

document.write(num); // undefined 
var num;
num = 50;
Проверьте, посмотрите <</>',

Если переменную объявляют после ее использования, но предварительно ее инициализировали, она вернет это значение:

num = 50;
document.write(num); // 50
var num;
Проверьте, посмотрите <</>',

использоватьletилиconstНе объявленные переменные и константы.

Не поднятая инициализация JavaScript

JavaScript поднимает только объявления, но не инициализацию.

Следующие два примера дают разные результаты:

Пример 1:
var x = 1; // Инициализация x
var y = 2; // Инициализация y
document.write(x + " " + y); // 1 2
Проверьте, посмотрите <</>',
Пример 2:
var x = 1; // Инициализация x
document.write(x + " " + y); // 1 undefined
var y = 2; // Инициализация y
Проверьте, посмотрите <</>',

ВПример 2:Только объявление (var y) а не инициализация (= 2) поднимается в верх.

Благодаря подъему, y была объявлена до использования, но ее значение не определено, так как инициализация не была поднята.

upper пример понимается как:

var x; // Объявление x
var y; // Объявление y
// Подъем завершен.
x = 1; // Инициализация x
document.write(x + " " + y); // 1 undefined
Проверьте, посмотрите <</>',

Всегда объявляйте переменные в начале

Подъем (Hoisting) - это неизвестное или игнорируемое поведение JavaScript.

Если вы не понимаете подъем (Hoisting), в вашем коде могут быть ошибки.

Чтобы избежать ошибок, всегда объявляйте все переменные в начале каждого домена.

Внимание:В строгом режиме JavaScript не позволяет использовать переменные, если они не были объявлены.

Вы узнаете больше о "use strict" в следующей главе.