Ответ вслух Junior Области видимости и замыкания спрашивают часто обновлено

Всплытие и TDZ

Вопрос

Что такое hoisting и чем var отличается от let и const?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Объявления обрабатываются до выполнения кода. var при этом получает undefined, объявления функций поднимаются вместе с телом, а let и const поднимаются, но остаются неинициализированными - обращение к ним до строки объявления бросает ReferenceError.

Что должно прозвучать в ответе

  • объявления поднимаются в начало области видимости на этапе компиляции

  • var инициализируется undefined, объявления функций - целиком

  • let/const поднимаются, но не инициализируются - временная мёртвая зона

  • var имеет функциональную область, let/const - блочную

  • var в глобальной области создаёт свойство window, let - нет

  • const запрещает переприсваивание, но не мутацию объекта

Что могут спросить следом

  • Что выведет цикл for с var и колбэками
  • Почему функцию можно вызвать до объявления, а стрелку нельзя
  • Как let чинит классическую задачу с циклом и setTimeout

Разбор

Объявления обрабатываются до выполнения кода. var при этом получает undefined, объявления функций поднимаются вместе с телом, а let и const поднимаются, но остаются неинициализированными - обращение к ним до строки объявления бросает ReferenceError. Этот промежуток и называется временной мёртвой зоной.

var живёт в функции целиком и в глобальной области создаёт свойство window; let/const ограничены блоком. const запрещает переприсваивание ссылки, но содержимое объекта менять не мешает.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.