Веб Мастерская | Веб разработка и программирование | ИТ | IT
Без категории · 9 сентября 2026 г.
JavaScript:
JavaScript: Привет, коллеги! Сегодня разберем невидимую мину замедленного действия в JavaScript — Temporal Dead Zone (TDZ). Ту самую, из-за которой падают скрипты, а джуны в панике гуглят «почему Cannot access variable before initialization». Все мы знаем классику: старый добрый var всплывает как топор, и к нему можно обращаться до объявления (получив undefined). Но когда в игру вошли строгие let и const, правила игры изменились. Смотрите базовый пример console.log(discount); // 💥 ReferenceError! let discount = 15; Движок браузера знает, что переменная discount существует в этой области видимости. Но она находится в «мертвой зоне» от начала блока до строчки инициализации. Тронете раньше времени — получите ошибку. Никакого мягкого undefined, только жесткий краш. «В реальном проекте такое не бывает», — скажете вы. О, еще как бывает! Ловите живой кейс из нашей практики. Часто проблема предательски прячется в аргументах по умолчанию: function calcPrice(price, promo = currentPromo) { return promo ? price * 0.9 : price; ... } // Переменная-то объявлена, но ниже вызова! calcPrice(1000); // 💥 Снова ошибка! let currentPromo = true; Функция вызывается до того, как currentPromo покинет мертвую зону. Итог: расчет корзины не работает, бизнес теряет заказы, разработчик пьет валерьянку. Как чинить и не ловить эти баги? Практика из мастерской 1️⃣ Порядок превыше всего. Возьмите за железное правило объявлять переменные в самом начале блока видимости (функции, цикла или скрипта). Не заставляйте парсер и коллег прыгать по коду в поисках смысла. 2️⃣ Линтер — ваш лучший друг. Если у вас еще не включено в ESLint правило no-use-before-define — срочно включайте. Оно подсветит использование переменных до их объявления еще на этапе написания кода, спасая ваши нервы в продакшене. 3️⃣ Осторожнее с замыканиями. Если передаете коллбек в setTimeout или addEventListener, убедитесь, что на момент срабатывания нужные переменные уже инициализированы, а не болтаются в зоне отчуждения. Понимание TDZ — это не просто каверзный вопрос для собеса, чтобы поумничать. Это базовый навык написания предсказуемого кода, который не ляжет в пятницу вечером. Вот так. Идем кодить дальше! 🚀 #javascript #js #webdev #frontend #фронтенд #программирование #кодинг #вебразработка #разработкасайтов #вебмастерская #сергейабрамов #tdz #es6 #багификсы #juniordeveloper