Веб Мастерская | Веб разработка и программирование | ИТ | IT
Без категории · 7 октября 2026 г.
JS:
JS: Strict mode: что обязательно нужно знать в современных проектах Коллеги, ловили себя на мысли, что директива 'use strict' в 2026 году выглядит как привет из 2011-го? В старых туториалах ее пихали в каждый файл, а сегодня многие джуны ее просто не видят в коде. Спойлер: вы уже пишете в строгом режиме. Но знать, как он работает под капотом, — маст-хэв, чтобы не словить странный баг на проде. Ситуация «До»: тихий ужас глобальных переменных Представьте классический легаси-код или спешку джуна: function calcTotal(price) { total = price * 1.2; // Опечатка! Хотели const total = ... return total; } calcTotal(100); console.log(total); // 120. Утекли в глобальный скоуп. В обычном режиме JS молча создаст глобальную переменную total. В большом проекте это мина замедленного действия: две такие функции в разных модулях перезапишут друг друга, и отладка превратится в ад. Ситуация «После»: строгий режим как строгий прораб Тот же код с активным строгим режимом (а в ES-модулях он включен по умолчанию): 'use strict'; function calcTotal(price) { total = price * 1.2; // Uncaught ReferenceError: total is not defined return total; } Интерпретатор сразу бросит ошибку. Код не запустится, пока вы не сделаете const total. Продакшен спасен. Что изменилось к 2026 году: автопилот Главное правило современности: специально писать 'use strict' почти не нужно. 1. ES-модули: Если ваш бандлер (Vite, Webpack) выдает код в формате модулей, строгий режим там с первой строки. Всегда. 2. Классы: Тело любого класса class MyComponent находится в строгом режиме по умолчанию. 3. Eval: Код внутри eval() в строгом режиме больше не засоряет внешнюю область видимости. Переменные, созданные внутри, там и остаются. Что по-прежнему запрещено: - Дубли параметров. function sum(a, a, b) {} — синтаксическая ошибка. Раньше JS просто брал последнее значение. - with. Забудьте. Эта конструкция ломает оптимизацию движка и предсказуемость this. - this в обычных функциях. Если вызвать функцию без контекста, this будет undefined, а не window. Классическая боль при передаче колбэков. - Запись в readonly. Попытка изменить замороженный объект (Object.freeze) или геттер без сеттера выбросит TypeError вместо тихого false. - Восьмеричные литералы. 0123 — ошибка. Используйте 0o123. Если вы поддерживаете легаси-библиотеку, которая подключается через старый <script>, и не можете перевести ее на модули, ставьте 'use strict' в самое начало файла. Но если пишете современный фронтенд — просто используйте import/export и class. Строгий режим подтянется сам, а ваш код автоматически станет быстрее, так как движку не нужно предусматривать все эти «грязные» сценарии для оптимизации. И еще один лайфхак для дебага: строгий режим ломает старые грязные хаки (например, расширение Object.prototype). Если какой-то полифилл или сторонняя либа внезапно начали сыпать ошибками после того, как вы обернули код в модуль — скорее всего, они нарушали правила строгого режима. Вот так. Идем кодить дальше! 🚀