Подъем - это стандартное поведение 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.