Всплытие и TDZ
Вопрос
Что такое hoisting и чем var отличается от let и const?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
объявления поднимаются в начало области видимости на этапе компиляции
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 ошибок.