JavaScript Хостинг
Хостинг (підйом) - це стандартна поведінка JavaScript, що полягає в переміщенні оголошень вгору.
JavaScript Підняття оголошень
В JavaScript змінну можна оголосити після того, як вона була використана.
Іншими словами: змінну можна використовувати до того, як вона була оголошена.
Приклад 1 дає той самий результат, що і Приклад 2:
Приклад 1
x = 5; // Присвоїти 5 до x
elem = document.getElementById("demo"); // Знайти елемент
elem.innerHTML = x; // Показати x в елементі
var x; // Оголосити x
Спробуйте самі »
Приклад 2
var x; // Оголосити x
x = 5; // Присвоїти 5 до x
elem = document.getElementById("demo"); // Знайти елемент
elem.innerHTML = x; // Показати x в елементі
Спробуйте самі »
Щоб зрозуміти це, ви маєте розуміти термін "хостинг" ("підйом").
Хостинг - це стандартна поведінка JavaScript, що полягає в переміщенні всіх оголошень в верхню частину поточної області видимості (в верхню частину поточного скрипту або поточної функції).
Ключові слова let та const
Змінні, визначені за допомогою let
та const
, підіймаються в верхню частину блоку, але не ініціалізуються.
Значення: Блоку коду відомо про змінну, але її не можна використовувати поки вона не буде оголошена.
Використання змінної let
перед її оголошенням призведе до помилки ReferenceError
.
Змінна знаходиться в "тимчасовій мертвій зоні" від початку блока до його оголошення:
Використання змінної const
перед її оголошенням є синтаксичною помилкою, тому код просто не запускається.
Прочитайте більше про ключові слова let та const в розділі JS Let / Const.
JavaScript Ініціалізації НЕ ПІДІЙМАЮТЬСЯ
JavaScript підіймає лише оголошення, але не ініціалізації.
Приклад 1 не дає такий самий результат, як Приклад 2:
Приклад 1
var x = 5; // Ініціалізувати x
var y = 7; // Ініціалізувати y
elem = document.getElementById("demo"); // Знайти елемент
elem.innerHTML = x + " " + y; // Показати x та y
Спробуйте самі »
Приклад 2
var x = 5; // Ініціалізувати x
elem = document.getElementById("demo"); // Знайти елемент
elem.innerHTML = x + " " + y; // Показати x та y
var y = 7; // Ініціалізувати y
Спробуйте самі »
Чи має сенс, що y є undefined в останньому прикладі?
Це пов’язано з тим, що вгору підіймається лише оголошення (var y), а не ініціалізація (=7).
Із-за підйому y було оголошено до його використання, але оскільки ініціалізації не підіймаються, значення y є undefined (не визначено).
Приклад 2 те саме, що написати:
Приклад
var x = 5; // Ініціалізувати x
var y; // Оголосити y
elem = document.getElementById("demo"); // Знайти елемент
elem.innerHTML = x + " " + y; // Показати x та y
y = 7; // Присвоїти 7 до y
Спробуйте самі »
Оголосити змінні вгорі!
Хостинг (підйом) є для багатьох розробників невідомою або недооціненою поведінкою JavaScript.
Якщо розробник не розуміє підйому, програми можуть містить баги (помилки).
Щоб уникнути багів, завжди оголошуйте всі змінні на початку кожної області.
Так як JavaScript інтерпретує код саме так, це завжди гарне правило.
Вивчіть "use strict" в наступному розділі цього підручника на нашому сайті W3Schools українською.