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

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

Вот пример:

console.log(x); // Output: undefined
var x = 5;

В этом примере мы объявили переменную x и попытались получить к ней доступ до ее объявления. Однако вывод инструкции console.log — это не ошибка, а скорее undefined. Это связано с тем, что во время процесса подъема объявление переменной x перемещается в начало ее области видимости, но ее значение еще не присвоено.

Это эквивалентно:

var x; // declaration is moved to the top
console.log(x); // Output: undefined
x = 5; // assignment is still in place

Важно отметить, что поднимаются только объявления, а не инициализации. Итак, в случае объявления функции вся функция перемещается в верхнюю часть области видимости, включая ее тело.

foo(); // Output: "Hello, World!"
function foo() {
  console.log("Hello, World!");
}

В этом примере мы объявили функцию foo и попытались вызвать ее до ее объявления. Однако этот код все равно будет работать, потому что все объявление функции поднимается наверх своей области видимости, включая ее тело. Итак, когда мы вызываем foo() позже в коде, он уже определен.