Что такое строгий режим use strict в JavaScript?

JuniorJavaScript · Frontend·Обновлено 23 августа 2026
Коротко
'use strict' — директива ES5, включающая строгий режим выполнения JavaScript: она запрещает опасные конструкции и превращает часть «тихих» ошибок в явные исключения, делая код предсказуемее и безопаснее.

Что такое strict mode

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

Как включить

Директиву можно поставить в начале файла — тогда она действует на весь скрипт, либо в начале функции — тогда только на неё:

'use strict';

function foo() {
  // код выполняется в строгом режиме
}

Важный нюанс: ES-модули (import/export) и тела классов работают в строгом режиме по умолчанию, без явной директивы.

Что меняется в строгом режиме

  • Присваивание необъявленной переменной больше не создаёт глобальную переменную — выбрасывается ReferenceError.
  • Попытки записать значение в неизменяемое или защищённое свойство (например, объект с writable: false) выбрасывают TypeError вместо тихого игнорирования.
  • delete для переменных, функций или необъявляемых свойств вызывает SyntaxError.
  • Запрещены дублирующиеся имена параметров функции.
  • Внутри обычной функции, вызванной без контекста, this равен undefined, а не глобальному объекту.
  • Зарезервированные слова будущих версий языка (implements, interface, package, private, protected, public, static, yield) нельзя использовать как идентификаторы.
  • Конструкция with полностью запрещена и вызывает SyntaxError.
  • Объект arguments больше не синхронизируется с именованными параметрами функции при их изменении.
  • Восьмеричные литералы вида 010 запрещены — нужно писать 0o10.

Зачем это нужно

Строгий режим помогает раньше отлавливать ошибки на этапе разработки, делает поведение кода более предсказуемым и одинаковым в разных движках, а также упрощает оптимизацию кода JS-движками, потому что часть неоднозначных конструкций запрещена.

Пример разницы поведения

// Обычный режим
function normal() {
  x = 10; // случайно создаётся глобальная переменная x
  console.log(x); // 10
}

// Строгий режим
function strict() {
  'use strict';
  y = 10; // ReferenceError: y is not defined
}

На собеседовании важно показать не только знание синтаксиса директивы, но и понимание, какие именно классы ошибок она переводит из «тихих» в явные, и что современный код (модули, классы) уже строгий по умолчанию.

Что хочет услышать интервьюер

Кандидат объясняет, что 'use strict' включает более строгую проверку ошибок и запрещает часть небезопасных конструкций

Знает области действия директивы: весь файл, отдельная функция, модуль целиком

Понимает конкретные отличия поведения: this в обычной функции, запрет на неявные глобальные переменные, ошибки при недопустимых операциях

Знает, что ES-модули и классы работают в строгом режиме по умолчанию

Может привести пример кода, который ведёт себя по-разному в обычном и строгом режимах

Пример: Включение strict mode на уровне файла и функции

'use strict';

function sum(a, b) {
  return a + b;
}

function onlyThisFunctionIsStrict() {
  'use strict';
  // здесь тоже действует строгий режим
}

Пример: Ошибка, которая проявляется только в строгом режиме

'use strict';

function test() {
  // без объявления переменной через let/const/var
  total = 100; // ReferenceError: total is not defined
}

test();

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

Считают, что 'use strict' нужно прописывать в каждой функции отдельно, не понимая, что директива в начале файла действует на весь скрипт

Путают строгий режим с TypeScript, линтерами (ESLint) или транспиляцией — это разные вещи

Не знают, что в классах и ES-модулях строгий режим включён по умолчанию без явной директивы

Забывают, что this в обычной функции без контекста вызова в строгом режиме равен undefined, а не глобальному объекту

Ошибочно полагают, что строгий режим снижает производительность, хотя на практике он чаще помогает оптимизациям движка

Лучшие курсы по теме

изображение курса

TypeScript с нуля

Антон Ларичев
AI-тренажерыAI-тренажеры
Практика в студииПрактика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.8
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Feature-Sliced Design

Антон Ларичев
AI-тренажерыAI-тренажеры
Практика в студииПрактика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.5
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Next.js - с нуля

Антон Ларичев
AI-тренажерыAI-тренажеры
Практика в студииПрактика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее