Найти в Дзене
Каморка Программиста

"Use strict" в JavaScript, что такое строгий режим

Народ, всем привет. Строгий режим (или strict mode) это такой особый режим выполнения JavaScript-кода, который был введён в стандарте ECMAScript 5 (ES5) для повышения безопасности, надёжности и некой предсказуемости работы программ. Включается он с помощью специальной директивы "use strict";, которая указывается в начале файла или функции. Несмотря на свою простоту, строгий режим играет важную роль в современном JavaScript, помогая разработчикам избегать распространённых ошибок и писать более чистый код. Но не все понимают, как он работает и что он по факту действительно «включает». Давайте сегодня и разберемся. Когда JavaScript только появился, он проектировался как язык для простых сценариев в браузере, и в нём было допущено много нестрогих, «прощающих» ошибок вещей. Например, можно было случайно создать глобальную переменную без явного объявления, использовать зарезервированные слова или обращаться к переменным, которые ещё не объявлены. Всё это приводило к непредсказуемому поведени
Оглавление

Народ, всем привет. Строгий режим (или strict mode) это такой особый режим выполнения JavaScript-кода, который был введён в стандарте ECMAScript 5 (ES5) для повышения безопасности, надёжности и некой предсказуемости работы программ. Включается он с помощью специальной директивы "use strict";, которая указывается в начале файла или функции.

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

Начнем с истории

Когда JavaScript только появился, он проектировался как язык для простых сценариев в браузере, и в нём было допущено много нестрогих, «прощающих» ошибок вещей. Например, можно было случайно создать глобальную переменную без явного объявления, использовать зарезервированные слова или обращаться к переменным, которые ещё не объявлены. Всё это приводило к непредсказуемому поведению кода, трудным для отладки ошибкам и проблемам с безопасностью.

-2

В ES5 разработчики решили исправить эти недочёты, добавив механизм, который делает язык более строгим, но без нарушения совместимости со старым кодом. Так появился строгий режим. Чтобы его включит, достаточно написать директиву "use strict"; в начале JavaScript-файла или функции.

"use strict";
let x = 10;

Теперь весь код в этом файле будет выполняться в строгом режиме. Можно также включить строгий режим только внутри конкретной функции:

function test() {
"use strict";
let y = 5;
}

В этом случае строгий режим действует только внутри функции test, а остальной код остаётся в обычном (нестрогом) режиме.

-3

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

Главная идея строгого режима — предотвращение потенциально опасных или неочевидных действий. Рассмотрим основные изменения, которые вносит "use strict".

1. Во-первых, строгий режим запрещает неявное создание глобальных переменных. В обычном JavaScript, если вы напишете x = 5;, не объявив переменную через let, const или var, интерпретатор автоматически создаст глобальную переменную x. Это часто приводит к ошибкам, особенно когда разработчик забывает объявить переменную. В строгом режиме такое поведение вызывает ошибку:

"use strict";
x = 5; // Ошибка: x не определена

Это простое правило помогает избежать множества багов.

2. Во-вторых, строгий режим запрещает дублирование имён параметров в функциях. В обычном режиме вы могли написать:

function f(a, a) { return a; }

Такой код работал, но его поведение было неоднозначным. В строгом режиме это вызовет синтаксическую ошибку.

3. Третье важное изменение касается объекта this. В обычном JavaScript, если вы вызываете функцию без контекста, например f();, значение this внутри неё по умолчанию будет глобальным объектом (window в браузере или global в Node.js). В строгом режиме this в таких случаях становится undefined, что делает поведение более логичным и безопасным:

"use strict";
function f() {
console.log(this); // undefined
}
f();

Это особенно важно при использовании методов и классов, где контекст играет ключевую роль.

-4
Хотите знать больше? Читайте нас в нашем Telegram – там еще больше интересного: новинки гаджетов, технологии, AI, фишки программистов, примеры дизайна и маркетинга.

Фишки строгости

Строгий режим также запрещает удаление переменных, функций и параметров. В обычном JavaScript выражение delete x; не вызывает ошибку, даже если x — это переменная, а не свойство объекта. В строгом режиме это становится синтаксической ошибкой.

Ещё одно важное ограничение это невозможность использовать зарезервированные слова будущих стандартов, таких как let, static, implements, interface, package, private, protected, public. Это позволяет избежать конфликтов с новыми возможностями языка.

Кроме того, строгий режим усиливает правила работы с eval. Обычно eval("var x = 10;") создаёт переменную x в текущей области видимости. В строгом режиме код, выполненный через eval, имеет собственную область видимости и не влияет на внешний код, что делает программы более безопасными.

Также строгий режим запрещает использование восьмеричных литералов, записанных с нуля в начале числа (0123), так как такие записи часто приводили к путанице. Теперь нужно использовать явное указание системы счисления — например, 0o123 для восьмеричных чисел.

-5

А может не стоит?

Важно учитывать, что одним из скрытых преимуществ строгого режима является оптимизация производительности. Современные движки JavaScript, такие как V8 или SpiderMonkey, могут выполнять строгий код быстрее, потому что он предсказуемее, а некоторые оптимизации становятся возможными только при включённом "use strict".

В современных версиях JavaScript строгий режим включается автоматически внутри модулей (import/export) и классов. То есть если вы пишете современный модульный код, вам не нужно явно указывать "use strict", он уже работает в строгом режиме. Однако для старого кода или отдельных функций директива всё ещё может быть полезна.

Стоит отметить, что строгий режим не меняет логику самого JavaScript-движка, а лишь добавляет дополнительные проверки и ограничения. Поэтому его использование не ломает совместимость с корректным старым кодом, но помогает быстрее обнаруживать ошибки и писать более надёжные программы.

-6

Если Вам нравятся наши статьи, и вы хотите отблагодарить автора (на развитие канала), нам будет очень приятно!