«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Раскрытие JavaScript: глубокое погружение в подъем, временную мертвую зону и состояния переменных

Раскрытие JavaScript: глубокое погружение в подъем, временную мертвую зону и состояния переменных

Опубликовано 30 июля 2024 г.
Просматривать:206

Unraveling JavaScript: A Deep Dive into Hoisting, Temporal Dead Zone, and Variable States

Внизу у меня есть две приятные и простые строки кода. Но я могу гарантировать вам, что это либо сильно смутит вас (поскольку вы проигнорировали принцип подчеркивания JS), либо утешит вас.

Но он полностью загрузил концепции знаний, как показано ниже

  • Подъем
  • Временная мертвая зона
  • переменная (необъявленная, неинициализированная, неопределенная) (Бонус)

Мое противоречивое заявление
как и var, const и let также поднимают свои свойства, но они находятся в другой зоне.

поднятие Def (простая версия для непрофессионалов)

  1. мы можем получить доступ к функциям и переменным до их фактического объявления.

Теперь пришло время углубиться в то, как Js компилирует и выполняет наш двухстрочный код

В JavaScript способ обработки объявлений и присвоений переменных компилятором и движком может быть детализирован, особенно при работе с let и var.
Давайте разберем процесс с точки зрения компилятора и выполнения данного кода:

name = 'ashu';
let name;

На этом этапе я поясняю, что когда мы пишем код JavaScript, первый парсер и компилятор компилирует наш код, а затем он переходит в фазу выполнения.

Перспектива компилятора
Первая строка: name = 'ashu';

На этапе компиляции,
движок JavaScript анализирует код и создает необходимые области действия.
Имя назначения = 'ашу';

будет отмечено, но на этом этапе движок не выполняет код; он просто записывает существование присвоения переменной с именем name.

Если имя не было объявлено ранее, компилятор рассматривает его как присвоение глобальной переменной (имя var в глобальной области видимости), поскольку объявления var поднимаются и доступны глобально.

Вторая строка: let name;

Когда компилятор встречает имя let; декларация, он подтверждает, что name должно иметь область действия блока.

Компилятор помещает имя во временную мертвую зону (TDZ) для области, к которой оно принадлежит,
это означает, что подтверждает существование имени, но помечает его как неинициализированное.

Объявление let не поднимается так же, как var.

Вместо этого он создает привязку в области видимости и инициализирует ее только при выполнении объявления.

Перспектива реализации

Первая строка: name = 'ashu';

Когда движок JavaScript выполняет назначение name = 'ashu';,
он проверяет наличие имени в текущей области. Поскольку name объявлено с помощью let, но находится в TDZ (временной мертвой зоне), любая попытка доступа к нему до инициализации объявления let приведет к ReferenceError.

Следовательно, на данный момент имя находится в TDZ, а имя назначения = 'ashu'; приводит к ошибке ReferenceError.


Вторая строка: let name;

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

Теперь бонусный совет

разница между необъявленным, неопределенным и неинициализированным;

undeclare :- переменная еще не объявлена.
не определено : — переменная объявлена, но не инициализирована;
неинициализированный :- переменная определена, но ее значение будет получено позже.

Пример:- const result = MultipleBy2(5);
до тех пор, пока значение возврата функции не будет присвоено результату, пока он не окажется в неинициализированной зоне.

интересный факт:-

Вы знаете, что временная мертвая зона изначально была оформлена для Const, но позже была принята в **Let**

Ссылка:-

  1. https://frontendmasters.com/courses/deep-javascript-v3 Моя аналогия с вторым пилотом GitHub
Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/ashutoshsarangi/unraveling-javascript-a-deep-dive-into-hoisting-temporal-dead-zone-and-variable-states-4d0j?1 При наличии каких-либо нарушений , пожалуйста, свяжитесь с Study_golang @163.comdelete
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3