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

Вроде переместился наверх!!??

Что это значит?

Ну… он не перемещает код наверх. Это неправильное и нубское объяснение.

Тогда что происходит???

Прежде чем выполнить одну строку кода, движок javascript переходит к каждой строке и назначает каждое объявление переменной в памяти (НЕ В НАЧАЛЕ ФАЙЛА).

Посмотрите на приведенный выше код:

Код еще не выполнен с левой стороны и находится в строке 3.

Но переменная a уже находится в глобальной области видимости со значением undefined.

Это называется подъемом.

ммм!!!!!!!!!!!!

Не запутайтесь. Это будет иметь смысл через некоторое время.

Помните, что код еще не выполнен, движок js просматривает код только для того, чтобы получить общее представление о том, ЧТО (переменные, объявления функций) использует ваша программа.

Как и при приготовлении пищи, у вас есть все ингредиенты на месте. Но пока не на плите.

Теперь, когда переменные, используемые в коде, назначены в памяти.

Код может легко работать.

Теперь пришло время выполнить

В настоящее время движок js выполняет строку 5, и если вы посмотрите на правую сторону в глобальной области видимости, значение a изменилось на 1 от undefined.

Примеры

  1. Приведенный выше код еще не выполнен, и переменные a и b назначены в память глобальной области видимости как undefined

2. Приведенный выше код еще не выполнен, а переменная a и объявление функции ab назначены памяти глобальной области видимости с a = undefinedи ab = function ab() { console.log(a) }

Помните, что переменные, объявленные withvarkeywords, поднимаются как undefined.

Объявления обычных функций поднимаются как сама функция.

3. В приведенном выше примере код был выполнен. Итак, что произошло:

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

— Программа получила только одну переменную a

— Сохраняем в памяти Глобальной области и присваиваем undefined

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

— Строка 1: aприсваивается undefinedпри подъеме, поэтому будет напечатано undefined

- Строка 2: Ничего

— Строка 3: Инициализировать aс 1, теперь aсодержит значение 1as

— Строка 4: Ничего

— Строка 5: console.log aвыводит новое инициализированное значение, т. е. 1

4. В приведенном выше примере код еще не выполнен, а переменная a объявлена ​​с let.

Если вы посмотрите на правую сторону, переменная хранится не в глобальной области, а в области сценария, также называемой временной мертвой зоной.

Это означает, что переменная, определенная с помощью let, поднимается, но недоступна для текущей области, пока не получит значение.

Таким образом, переменные, объявленные с помощью let и const, поднимаются, но недоступны для текущей области видимости, пока не получат значение.

5. Приведенный выше код выполняется и выдает ошибку, как описано в предыдущем примере.

Он выдает ReferenceError, говорящий cannot access 'a' before initialization

Это означает, что вы не можете получить доступ к a, пока не будет выполнена строка 3, где инициализируется переменная.

6. Приведенный выше код еще не выполнен, а переменные a и b находятся в области действия сценария, что означает, что они не будут выполняться до тех пор, пока не будут инициализированы.

Также функции, определенные с помощью constили let, называются обычными переменными, что означает, что их поднятое значение не похоже на обычные функции, определенные с помощью function a(){}.

Таким образом, они поднимаются, но не могут использоваться до тех пор, пока не будут инициализированы некоторым значением.

7. Этот временной код выполняется, и перед инициализацией никакая переменная не используется.

Переменные a и b инициализируются числом и функцией соответственно, а затем к ним обращаются.

Заключение

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

Эта концепция называется подъемом в javascript.