Строгий режим

↑ 1.4 JavaScript: основы · ← Предыдущая · → Следующая

Желательно~3 мин чтенияУровень: junior

Зачем это на собесе

Короткий вопрос, но показывает знание отличий режимов и того, где строгий режим включён по умолчанию.

Объяснение

Включается директивой "use strict" в начале файла или функции.

Во всех ES-модулях и классах строгий режим включён автоматически.

Что меняетсяНестрогий режимСтрогий
Присваивание необъявленной переменнойсоздаёт глобальнуюReferenceError
Запись в неизменяемое свойствомолча игнорируетсяTypeError
Дублирующиеся параметрыразрешеныошибка
this в обычной функцииwindowundefined
Удаление неудаляемогоfalseTypeError
Восьмеричные литералы 0108ошибка
with, arguments.calleeдоступнызапрещены
Зарезервированные слова (let, static, interface)ограничения слабееошибки
"use strict";
function f() { return this; }
f();               // undefined (в нестрогом — window)
x = 5;             // ReferenceError
Object.freeze({a: 1}).a = 2;   // TypeError

Причины использовать: раннее обнаружение ошибок, оптимизации движка, подготовка к будущим версиям языка.

Нюансы и подводные камни

  • Директива в середине файла не работает.
  • Смешивание строгих и нестрогих скриптов при конкатенации даёт неожиданное поведение.
  • eval в строгом режиме имеет свой scope.
  • TypeScript и бандлеры выдают строгий код по умолчанию.

Практика

  1. Проверьте различия на нескольких примерах в консоли.
  2. Найдите в проекте нестрогие файлы (без модулей).

Вопросы с ответами

Связанные темы