Подъем - это концептуальное понимание контекста выполнения в отношении фаз «создания» и «выполнения». Однако подъем может сбивать с толку, потому что, в отличие от названия, подъемник никуда не перемещает ваш код. Общее понимание подъема состоит в том, что переменные и функции передаются в верхнюю часть вашего кода, но это неверно. Физическое местоположение кода останется там, где вы его написали в текстовом редакторе. Чтобы упростить понимание, позвольте мне дать вам краткий обзор среды выполнения JavaScript.

Введение в среду выполнения JavaScript.

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

Программа состоит из пяти основных шагов, которые очень важно понять разработчикам.

  1. Глобальный контекст выполнения - это называется main() и требуется для запуска любого вашего кода.
  2. Контекстный стек - это можно рассматривать как очередь или последовательность задач.
  3. Контекст выполнения будет запущен, когда другая «задача» будет помещена в стек контекста и удерживается в теле кода выше.
  4. Этап создания - это этап, на котором ваш код читается и готовится к выполнению.
  5. Этап выполнения. Наконец, мы подошли к этапу выполнения. Как только все вышеперечисленное будет завершено, приступим к выполнению нашего кода.

Ниже приведено более визуальное представление среды выполнения JS и ее связи с контекстом выполнения. Ни один из приведенных ниже кодов на самом деле не может и не будет работать в браузере.

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

Имейте в виду, что поднимаются только «объявления», а не «инициализаторы». Также имейте в виду, что. const, let инициализируются только после «фазы создания», но var и function инициализируются.

Теперь, когда мы справились с базовым пониманием контекста выполнения и среды выполнения JavaScript, давайте рассмотрим более сложный код.

Сначала я создам статические данные для нашего метода.

Затем мы можем написать код и оценить его.

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

После определения данных realsingSoon Первое, что мы определяем в теле нашей функции, это следующее.

Итак, как мы обсуждали ранее, есть два основных этапа: «создание» и «исполнение». На этапе создания создается контекст выполнения для всех поднятых ключевых слов, таких как function и var. Вот почему наша bigFunc функция может работать даже поверх всего остального кода и почему realisingSoon переменная может быть объявлена ​​после того, как значение было установлено.

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

Выше вы заметите, что мы вызвали нашу orderByPrice функцию перед объявлением, потому что она также поднимается. Это означает, что мы объявили и инициализировали его для вызова в любой точке контекста выполнения во время выполнения.

Подробнее о контексте исполнения.

Всякий раз, когда мы объявляем новую функцию, будь то ключевое слово function или выражение функции, мы получим новый контекст выполнения или новую область видимости. Но мы можем обойти это, просто используя ключевое слово let для объявления переменной вне контекста выполнения, например:

Надеюсь, это поможет прояснить ваше понимание контекста выполнения и подъема. Если у вас есть что добавить или вам нужна дополнительная информация, оставьте комментарий, и я постараюсь ответить на любые вопросы или сделать обновления на основе отзывов.

Больше контента на plainenglish.io