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

Следующие элементы не поднимаются в JavaScript:

1. Функции, определяемые выражением.

2. Переменные и константы, объявленные с помощью let или const.

3. Стрелочные функции.

В JavaScript переменную можно использовать до ее объявления.

Хорошо ... но что это значит? Я не понимаю того, что вы пытаетесь сказать.

Позвольте мне помочь вам понять это на нескольких примерах.

Когда объявление функции поднимается, все тело функции поднимается вместе с ним. Итак, после того, как интерпретатор закончил работу с кодом в первом примере, он работает примерно так:

Но ... разве код после оператора возврата не недоступен?

При выполнении JavaScript есть Context (который ECMA 5 разбивает на LexicalEnvironment, VariableEnvironment и ThisBinding) и Process (набор операторов, которые должны вызываться последовательно).

Объявления вносят вклад в VariableEnvironment при входе в область выполнения. Они отличаются от заявлений (таких как return) и не подчиняются их правилам обработки.

Давайте посмотрим еще на один пример, на этот раз с некоторыми функциональными выражениями.

Обратите внимание, что при создании переменные инициализируются значением undefined. Переменной с инициализатором присваивается значение AssignmentExpression при выполнении VariableStatement, а не при создании переменной.

var myFunction = function () {
   // some executable code
}

В приведенном выше фрагменте кода левая сторона var myFunction является объявлением переменной.

Объявления переменных поднимаются, а их выражения присваивания - нет. Итак, когда myFunction поднят, интерпретатор изначально устанавливает var myFunction = undefined. Само определение функции не поднимается.

Помните о вышеизложенном, и давайте посмотрим, как работает второй пример.

Это будет работать примерно так:

После вызова функции, созданной первым функциональным выражением, код второго выражения становится недоступным.

Объявите свои переменные вверху, чтобы избежать беспорядка

Подъем, каким бы увлекательным он ни был, может привести к ошибкам, так как его довольно легко не заметить.

Вы можете попробовать строгий режим, используя директиву use strict вверху. JavaScript в строгом режиме не позволяет использовать переменные, если они не объявлены.

Это все для этой статьи. Я надеюсь, что это помогло вам получить некоторую ясность в отношении подъема в JavaScript.