> Что такое директива 'use strict' в JavaScript и как она влияет на код (JavaScript)

Уровень: junior · Роль: frontend · Категория: Технические вопросы

Компании: Сбер

Стек: JavaScript

> Пример ответа

Короткий ответ

Директива 'use strict' включает строгий режим выполнения JavaScript. Она запрещает использование необъявленных переменных, удаление свойств объектов, дублирование параметров функций и другие потенциально опасные конструкции. Строгий режим делает код более безопасным и предсказуемым, превращая некоторые "тихие" ошибки в явные исключения.

Подробное объяснение

'use strict' - это директива, которая переводит весь скрипт или отдельную функцию в строгий режим. Она была введена в ECMAScript 5 и действует только в современных браузерах.

Основные изменения в строгом режиме:

  • Запрет неявного создания глобальных переменных: присваивание значения необъявленной переменной вызывает ошибку
  • Запрет удаления свойств, которые нельзя удалить: delete для обычных переменных, функций или аргументов вызывает ошибку
  • Запрет дублирования имен параметров: function(a, a) вызовет ошибку
  • Запрет with: конструкция with полностью запрещена
  • Изменение this: в обычном режиме this в функции без контекста ссылается на глобальный объект, в строгом - undefined
  • Запрет использования arguments.callee и arguments.caller
  • Запрет записи в read-only свойства: попытка изменить неизменяемое свойство вызывает ошибку
  • Дополнительные ограничения: запрет на восьмеричные литералы (010), eval не создает переменные в окружающей области видимости

Директиву можно применить:

  • Ко всему скрипту: 'use strict'; в начале файла
  • К отдельной функции: 'use strict'; в начале тела функции
  • В модулях ES6: строгий режим включен по умолчанию

На практике

На собеседовании для junior-позиции достаточно показать понимание базовых ограничений и причин использования. Практические рекомендации:

  • Всегда используйте 'use strict' в новых проектах - это предотвращает распространенные ошибки
  • В современных проектах с ES-модулями или сборщиками (Webpack, Vite) строгий режим включается автоматически
  • Если работаете с legacy-кодом, добавляйте строгий режим постепенно, проверяя совместимость
  • При написании библиотек, которые могут использоваться в разных окружениях, используйте строгий режим внутри функции, чтобы не влиять на глобальный код

Пример кода

JAVASCRIPT
// Обычный режим
function normalMode() {
x = 10; // Создает глобальную переменную x
console.log(x); // 10
}
// Строгий режим
function strictMode() {
'use strict';
y = 20; // ReferenceError: y is not defined
}
// this в обычном режиме
function showThis() {
console.log(this); // window (в браузере)
}
// this в строгом режиме
function showThisStrict() {
'use strict';
console.log(this); // undefined
}
// Дублирование параметров
function duplicateParams(a, a) {
'use strict'; // SyntaxError: duplicate formal parameter
}

Как отвечать на собеседовании

Начните с краткого определения: "'use strict' - это директива, которая включает строгий режим, делающий JavaScript более безопасным". Затем перечислите 2-3 ключевых изменения: запрет необъявленных переменных, изменение this, запрет дублирования параметров. Объясните, почему это полезно: предотвращает случайные глобальные переменные, делает ошибки явными. Упомяните, что в ES-модулях строгий режим включен по умолчанию. Если спросят про this - объясните разницу между обычным и строгим режимом.

Что проверяет интервьюер

Интервьюер проверяет:

  • Понимание базовых механизмов JavaScript и его эволюции
  • Знание потенциальных проблем в коде и способов их предотвращения
  • Умение объяснить разницу между режимами выполнения
  • Осведомленность о современных стандартах (ES6+)
  • Способность применять директиву на практике

Типичные ошибки

  • Путаница с 'use strict' и 'use asm' - это разные директивы
  • Утверждение, что строгий режим делает код медленнее - на самом деле он может ускорить выполнение
  • Игнорирование области действия - 'use strict' внутри функции не влияет на внешний код
  • Забывают, что в ES-модулях строгий режим включен по умолчанию
  • Думают, что 'use strict' исправляет все ошибки - он только превращает некоторые "тихие" ошибки в явные исключения
  • Не знают про запрет with - это важное отличие от обычного режима

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью