Skip to main content

use strict

1. Що таке "use strict"

"use strict" - це директива, яка вмикає строгий режим інтерпретації JavaScript.

Він допомагає писати безпечніший, передбачуваніший код, усуваючи "тихі" помилки і старе неочевидне поведінку.

Строгий режим діє в межах файлу чи функції, де його оголошено на початку:

javascript
"use strict";

або:

javascript
function foo() { "use strict"; // строгий режим тільки всередині цієї функції }

2. Головна зміна - поведінка this

КонтекстБез "use strict"З "use strict"
У звичайній функціїthiswindow (у браузері)thisundefined
У методі об'єктаthis → сам об'єктthis → той самий об'єкт (не змінюється)
У стрілковій функціїуспадковується ззовніуспадковується ззовні (не змінюється)

Приклад без строгого режиму

javascript
function showThis() { console.log(this); } showThis(); // window (у браузері)

Тут JS "підставляє" глобальний об'єкт (window) за замовчуванням.


Приклад зі строгим режимом

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

У строгому режимі, якщо функцію викликано не як метод об'єкта, this залишається undefined - жодних неявних "магічних" прив'язок.

Це допомагає уникнути випадкових звернень до глобального об'єкта (наприклад, window або global).


3. Строгий режим забороняє неявне створення змінних

Без строгого режиму:

javascript
function test() { x = 10; // змінна створиться глобально! console.log(x); } test(); console.log(window.x); // 10

З "use strict":

javascript
"use strict"; function test() { x = 10; // ReferenceError: x is not defined } test();

Тепер потрібно оголошувати змінні явно (let, const, var), інакше - помилка.


4. Забороняє дублювання імен змінних і параметрів

Без строгого режиму:

javascript
function sum(a, a, c) { return a + a + c; } console.log(sum(1, 2, 3)); // 7

З "use strict":

javascript
"use strict"; function sum(a, a, c) { // SyntaxError return a + a + c; }

Це запобігає помилкам і робить код передбачуванішим.


5. Забороняє видалення змінних, функцій і параметрів

Без строгого режиму:

javascript
var a = 1; delete a; // false

З "use strict":

javascript
"use strict"; var a = 1; delete a; // SyntaxError

У строгому режимі не можна видаляти те, що не є властивістю об'єкта.


6. Забороняє присвоєння значення NaN, undefined, Infinity

javascript
"use strict"; undefined = 5; // TypeError NaN = 123; // TypeError Infinity = 42; // TypeError

7. Покращує безпеку eval

Без строгого режиму eval може створювати змінні в поточному контексті:

javascript
eval("var x = 10;"); console.log(x); // 10

Зі строгим режимом eval створює власну область видимості:

javascript
"use strict"; eval("var x = 10;"); console.log(x); // ReferenceError

Це запобігає випадковому забрудненню оточення.


8. Захищає від неявних "м'яких" помилок

СитуаціяБез "use strict"З "use strict"
Присвоєння в NaN, undefined, Infinityтихо ігноруєтьсяпомилка
Присвоєння в constігноруєтьсяпомилка
Заборона withможнане можна
Видалення властивостей з об'єктівтихо ігноруєтьсяпомилка

ПІДСУМОК

Що змінює "use strict"Поведінка
this у звичайних функціяхundefined замість window
Необ'явлені змінніПомилка
Дублюючі параметриПомилка
Видалення змінних/функційПомилка
Присвоєння в NaN, undefined, InfinityПомилка
evalСтворює власний scope
withЗаборонено

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.