Основная идея
Temporal Dead Zone (TDZ) — это временной промежуток между началом области видимости переменной (let/const) и её фактическим объявлением, в течение которого обращение к переменной вызывает ReferenceError.
Ключевые аспекты
- Hoisting существует — переменные let/const поднимаются, но не инициализируются
- Безопасность кода — TDZ предотвращает использование переменных до их объявления
- Применимость — работает только с let и const, не с var
- Область действия — от начала блока до строки объявления
- Typeof не спасает — даже typeof вызовет ReferenceError в TDZ
Плюсы TDZ
- Помогает выявить ошибки на этапе выполнения
- Делает код предсказуемым и читаемым
- Предотвращает использование неинициализированных значений
Минусы
- Может вызвать неожиданные ошибки при рефакторинге
- Требует понимания механизма для отладки
- Отличается от поведения var, что может запутать
Частые ошибки на собеседованиях
- Путают hoisting с отсутствием hoisting (let/const тоже поднимаются, просто находятся в TDZ)
- Думают, что typeof безопасен для переменных в TDZ
- Не понимают, что TDZ определяется временем выполнения, а не позицией в коде