Вы можете прочитать о подъеме в Javascript где угодно, но вот суть: Javascript возьмет все ваши объявления переменных, переместит их наверх их текущей области видимости, а затем запустит ваш код.

Это довольно круто, правда?

За исключением того, что он принимает только объявления, а не инициализации.

Ты можешь написать

console.log(x);
let x = "hey";

и получите Reference Error, или вы можете написать

let x;
console.log(x);
x = "hey"

и получите «undefined» в своей консоли, или вы можете написать

let x = "hey";
console.log(x);

и на самом деле получить «привет» в вашей консоли.

Вы помните, как читали пьесы в старшей школе, и у каждой пьесы была страница под названием «Dramatis Personae» перед началом самой пьесы? Это было здорово, потому что вы могли сказать «о, там будет три персонажа» или «о, там будет тридцать персонажей», и вы могли соответствующим образом скорректировать свои ожидания.

Подумайте о подъеме таким же образом. Вы можете объявить и инициализировать свои переменные где угодно и надеяться, что подъем пройдет нормально, или вы можете сказать: «Я ненавижу тебя, подъем», объявить и инициализировать свои переменные в самом начале и настроиться на успех.

Почему существует подъем? Бьет меня. Мне еще предстоит столкнуться с ситуацией, когда я хочу, чтобы функция выполнялась, и надеюсь, что она получает правильные переменные. Javascript был классно написан за десять дней, и иногда это действительно видно.