JavaScript: директива "use strict" Печать
Добавил(а) microsin   

"use strict" — это директива, которая переключает ваш код в так называемый "строгий режим" (strict mode). Это современный, более безопасный способ написания JavaScript, который делает код чище и помогает избегать распространенных ошибок.

[Что это и зачем нужно]

Строгий режим был введен в стандарте ECMAScript 5 (ES5) в 2009 году. Его главная цель — сделать JavaScript более надежным и подготовить язык к будущему развитию.

Для этого он:

1. Превращает скрытые ошибки в явные: в обычном режиме некоторые неудачные действия (например, присвоение значения неизменяемому свойству) просто игнорируются. В строгом режиме они выбрасывают понятные исключения.
2. Запрещает небезопасные конструкции: например, нельзя случайно создать глобальную переменную, использовав `x = 5` без объявления. Это предотвращает трудноуловимые баги.
3. Улучшает производительность: исправляя некоторые особенности языка, строгий режим позволяет движкам JavaScript лучше оптимизировать код, что может сделать его быстрее.

[Как включить строгий режим]

Директива "use strict" — это просто строка, которую нужно написать в самом начале скрипта или функции. Старые браузеры воспримут её как обычный текст и не выдадут ошибку.

Для всего скрипта: поместите "use strict"; в первую строку файла.

"use strict";
// Весь код здесь будет работать в строгом режиме

let message = "Привет, мир!";

Важно, чтобы директива была самой первой исполняемой строкой. Если перед ней будет другой код, она не сработает.

Для отдельной функции: поместите "use strict"; в начало тела функции.

function myStrictFunction() {
"use strict";
// Эта функция работает в строгом режиме }

function myNotStrictFunction() {
// А эта — в обычном }

Важный момент: нельзя включить строгий режим в блоке кода, заключенном в фигурные скобки `{ ... }` (например, внутри if или for). Это сработает только для всего скрипта или для функции.

[Что именно меняется в коде]

Основные изменения, которые вносит строгий режим, можно разделить на несколько категорий.

Изменение Обычный режим (Sloppy) Строгий режим (Strict)
Объявление переменных `x = 10;` создает глобальную переменную. `x = 10;` вызывает ошибку `ReferenceError`.
Ошибки при присваивании Попытка изменить `NaN` или свойство `length` строки просто игнорируется. Любая подобная попытка вызовет ошибку `TypeError`.
Удаление переменных `delete x;` для переменной `x` может работать некорректно. `delete x;` для переменной вызывает синтаксическую ошибку.
Дублирование в объектах `{ p: 1, p: 2 }` — последнее значение перезапишет первое. Дублирование имен свойств вызывает синтаксическую ошибку.
Значение `this` В функции, вызванной без контекста, `this` указывает на глобальный объект (`window`). `this` в такой функции будет `undefined`.
Конструкция `with` Разрешена, но запутывает код и мешает оптимизации. Запрещена и вызывает синтаксическую ошибку.
`eval()` Может создавать переменные во внешней области видимости. Создает переменные только в своей собственной области видимости, не влияя на внешний код.

Нужно ли всегда использовать "use strict"? Краткий ответ: да, это хорошая практика.

Однако есть важный нюанс. Современные возможности JavaScript, такие как классы (Classes) и модули (Modules), автоматически включают строгий режим для всего своего содержимого. Если вы пишете код с использованием `class` или `export/import`, то добавлять директиву "use strict" в начале файла необязательно — она уже активна.

Для всех остальных случаев (например, для отдельных функций или скриптов без модулей) явное использование "use strict" остается простым и надежным способом сделать ваш код более качественным и безопасным.