Понимание контекста подъема и выполнения в JavaScript с одним из самых забавных ситкомов
Интервьюеры, как правило, проверяют начинающих разработчиков, чтобы проверить их понимание основных концепций языка, настраивая основные вопросы. Чтобы преуспеть в JavaScript или любом другом языке, каждый разработчик должен очень хорошо знать свои основы.
Давайте сегодня обсудим одну из основных концепций JavaScript в интервью между старшим разработчиком Рэймондом Холтом и начинающим программистом Джейком Перальтой, ищущим стажировку в стартапе Холта — ? Конечно, вы угадали, B99!
Раймонд Холт: Приветствую, Перальта, я вижу, что ваше резюме соответствует действительности. У меня есть вся необходимая информация. Я вижу, вы упомянули опыт работы с JavaScript. Позвольте мне задать вам быстрый вопрос, чтобы проверить ваши знания. Что выведет этот код, Перальта?
Джейк: Бинг Пот! В журнале консоли мы сначала получим «Hello world», а затем 7.
Раймонд Холт: Хорошо, как насчет этого?
Джейк:Нет! Это будет «Hello world», а затем «undefined».
Раймонд Холт: Не могли бы вы подробно объяснить, как это происходит за кулисами?
Джейк:Хорошо, круто, круто, круто, круто, круто, круто
Раймонд Холт: Ты нервничаешь, Перальта?
Джейк: Нет, капитан, я рассказчик. Это мое ремесло! Здесь я придумываю лучшее объяснение.
За кулисами есть этот контейнер под названием «Контекст выполнения». Он состоит из двух компонентов —
- Компонент памяти
- Компонент кода
Раймонд Холт: Дайте мне технические условия для этих компонентов Peralta!
Джейк : Эй, капитан!
Раймонд Холд: Да, Перальта. Не используйте «Я». Продолжать !
Джейк: Да, капитан! Компонент памяти — это не что иное, как переменная среда, а компонент кода — это не что иное, как поток выполнения.
Поскольку JavaScript является синхронным однопоточным языком, он выполняет каждый код построчно в компоненте кода.
Все переменные и функции зарезервированы в памяти еще до выполнения кода.
В случае с переменными они сохраняются в памяти как значение undefined. «undefined» выступает здесь как заполнитель. В то время как в случае функций вся копия функции хранится в памяти.
Во втором примере память
var x = undefined function getHello(){ console.log("Hello world"); }
уже присутствует в памяти.
Итак, в потоке выполнения, то есть в компоненте кода,
- Первая строка кода выполняется успешно, так как функция уже присутствует в памяти.
- Вторая строка выполняется, но поскольку в памяти хранится значение x, хранящееся как неопределенное, в консоли выводится «неопределенное».
Кроме того, если я использую функцию стрелки, например,
var getHello = () => { console.log("Hello world") }
Будет напечатано сообщение об ошибке «Неперехваченная ссылка», поскольку функция здесь хранится как переменная, которая не определена.
Раймонд Холт: верно
Джейк: Да! Я сказал несколько правильных вещей подряд! Noiceeee
Раймонд Холт: Пожалуйста, воздержитесь от использования этих слов Перальта. Последний вопрос, и мы можем закончить дискуссию. Что не определено? Это то же самое, что не определено?
Джейк: Умный вопрос! Нет, они совсем не одинаковые! Undefined выступает в качестве заполнителя для переменной, которая была где-то объявлена в коде. Не определено означает, что переменная нигде не упоминается в коде.
Пример ,
Здесь код выдает ошибку «Uncaught ReferenceError: x не определен».
Раймонд Холт:Чисто! Хорошее объяснение Перальта!
Джейк:Спасибо, папа! Эмм спасибо капитан!
Раймонд Холт: я поручу вам проект с Сантьяго, надеюсь, вы не возражаете!
Джейк : Неееет!
Не доктор ssh , Фремулон
Подробнее о подъеме —
Свяжитесь со мной на LinkedIn: Дивья Рао | LinkedIn
Подпишитесь на меня в Твиттере: Дивья Рао (@dailydevDivya) / Twitter