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 никак not дают тот же результат, как иПример 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
Попробуйте сами »
Имеет ли смысл, что у не определен в последнем примере?
Это потому, что наверх поднимается только объявление (var y), а не инициализация (=7).
Из-за подъема у был объявлен до его использования, но поскольку инициализации не поднимаются, значение у не определен.
Пример 2 совпадает с записью:
Пример
var x = 5; // Инициализируем x
var y; // Объявляем y
elem = document.getElementById("demo"); // Находим элемент
elem.innerHTML = x + " " + y; // Отображаем x и y
y = 7; // Присваиваем 7 к y
Попробуйте сами »
Объявите свои переменные наверху!
Подъем - это (для многих разработчиков) неизвестное или недооцененное поведение JavaScript.
Если разработчик не понимает подъема, программы могут содержать ошибки (errors).
Чтобы избежать ошибок, всегда объявляйте все переменные в начале каждой области видимости.
Так как JavaScript интерпретирует код именно так, это всегда хорошее правило.
JavaScript в строгом режиме не позволяет использовать переменные, если они не объявлены. Изучите "строгое использование" в следующей главе.