Подъем JavaScript
Подъем — это поведение JavaScript по умолчанию для перемещения объявлений наверх.
Объявления JavaScript поднимаются
В JavaScript переменная может быть объявлена после ее использования.
Другими словами; переменная может использоваться до того, как она была объявлена.
Пример 1 дает тот же результат, что и пример 2 :
Пример 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
Пример 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
Чтобы понять это, вы должны понять термин «подъем».
Подъем — это поведение JavaScript по умолчанию, когда все объявления перемещаются в верхнюю часть текущей области (в верхнюю часть текущего скрипта или текущей функции).
Ключевые слова let и const
Переменные, определенные с помощью let
и const
, поднимаются наверх блока, но не инициализируются .
Значение: Блок кода знает о переменной, но ее нельзя использовать, пока она не будет объявлена.
Использование let
переменной до ее объявления приведет к созданию файла
ReferenceError
.
Переменная находится во «временной мертвой зоне» с начала блока до ее объявления:
Пример
Это приведет кReferenceError
:
carName = "Volvo";
let carName;
Использование const
переменной до ее объявления является синтаксической ошибкой, поэтому код просто не запустится.
Пример
Этот код не будет работать.
carName = "Volvo";
const carName;
Подробнее о let и const читайте в JS Let/Const .
Инициализации JavaScript не поднимаются
JavaScript поднимает только объявления, а не инициализации.
Пример 1 не дает такого же результата, как пример 2 :
Пример 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
Пример 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
Имеет ли смысл, что y не определено в последнем примере?
Это связано с тем, что наверх поднимается только объявление (var y), а не инициализация (=7).
Из-за подъема y был объявлен до его использования, но поскольку инициализации не поднимаются, значение y не определено.
Пример 2 аналогичен написанию:
Пример
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
Объявите свои переменные вверху!
Поднятие (для многих разработчиков) неизвестное или упускаемое из виду поведение JavaScript.
Если разработчик не понимает подъем, программы могут содержать баги (ошибки).
Чтобы избежать ошибок, всегда объявляйте все переменные в начале каждой области видимости.
Так как JavaScript интерпретирует код именно так, это всегда хорошее правило.
JavaScript в строгом режиме не позволяет использовать переменные, если они не объявлены.
Изучите «use strict» в следующей главе.