JavaScript обладает некоторыми различными функциями и возможностями, которые отличает этот язык от других языков программирования! Well Hoisting - одна из таких функций.

Все в JavaScript происходит внутри контекста выполнения. Теперь, что такое контекст выполнения? Контекст выполнения Well содержит, говоря простым языком, раздел памяти и раздел выполнения кода. И в основном он состоит из двух этапов:

  1. Фаза создания
  2. Фаза выполнения кода

Рассмотрим следующий пример,

Прежде всего создается глобальный контекст выполнения. Всякий раз, когда JS Engine встречает любую переменную с ключевым словом var, он выделяет ей память с заполнителем undefined, а для функций также выделяется память с самим блоком кода (в качестве заполнителя). Это происходит на этапе создания.

Фаза создания

Этап выполнения кода

На этом этапе переменная n получает свое фактическое значение. Как только компилятор встречает cube (), создается новый контекст выполнения, который снова следует той же процедуре. Затем он возвращает ans. Наконец, после этого контекст выполнения для куба отбрасывается.

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

Но на самом деле происходит следующее:

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

Подъем позволяет вызывать функции еще до их объявления.

Помните: переменные частично подняты, а функции полностью подняты.

Нормальные функции поднимаются полностью, тогда как стрелочные функции и функциональные выражения поднимаются частично (частично означает, что компилятор выделит им память с заполнителем undefined).

Давайте посмотрим на этот фрагмент кода и его соответствующие выходные данные и попытаемся понять приведенные выше утверждения.

Но если мы преобразуем указанную выше функцию в стрелочную и вызовем ее в начале, это приведет к ошибке ссылки!

Наряду с переменными, объявленными с помощью ключевого слова var, также поднимаются переменные, объявленные с ключевыми словами let и const! Однако они находятся во временной мертвой зоне.

Что такое временная мертвая зона?

Временная мертвая зона - это время, с которого переменная let была поднята и инициализирована некоторым значением.

переменные, объявленные с помощью ключевых слов let и const, не выделяют память в глобальном пространстве, а распределяют память где-то еще. Это временная мертвая зона.

Это приводит к ошибке ссылки!

Как бы ни была поднята переменная a, ей выделяется память где-то еще, но не в глобальном пространстве памяти. Если мы проверим это в исходной панели, мы увидим, что переменная поднимается.

Вот и все для этого блога!

Надеюсь, это поможет.

Удачного обучения! 🤗