use strict
1. Що таке "use strict"
"use strict"- це директива, яка вмикає строгий режим інтерпретації JavaScript.Він допомагає писати безпечніший, передбачуваніший код, усуваючи "тихі" помилки і старе неочевидне поведінку.
Строгий режим діє в межах файлу чи функції, де його оголошено на початку:
"use strict";або:
function foo() {
"use strict";
// строгий режим тільки всередині цієї функції
}2. Головна зміна - поведінка this
| Контекст | Без "use strict" | З "use strict" |
|---|---|---|
| У звичайній функції | this → window (у браузері) | this → undefined |
| У методі об'єкта | this → сам об'єкт | this → той самий об'єкт (не змінюється) |
| У стрілковій функції | успадковується ззовні | успадковується ззовні (не змінюється) |
Приклад без строгого режиму
function showThis() {
console.log(this);
}
showThis(); // window (у браузері)Тут JS "підставляє" глобальний об'єкт (window) за замовчуванням.
Приклад зі строгим режимом
"use strict";
function showThis() {
console.log(this);
}
showThis(); // undefinedУ строгому режимі, якщо функцію викликано не як метод об'єкта,
this залишається undefined - жодних неявних "магічних" прив'язок.
Це допомагає уникнути випадкових звернень до глобального об'єкта (наприклад, window або global).
3. Строгий режим забороняє неявне створення змінних
Без строгого режиму:
function test() {
x = 10; // змінна створиться глобально!
console.log(x);
}
test();
console.log(window.x); // 10З "use strict":
"use strict";
function test() {
x = 10; // ReferenceError: x is not defined
}
test();Тепер потрібно оголошувати змінні явно (let, const, var),
інакше - помилка.
4. Забороняє дублювання імен змінних і параметрів
Без строгого режиму:
function sum(a, a, c) {
return a + a + c;
}
console.log(sum(1, 2, 3)); // 7З "use strict":
"use strict";
function sum(a, a, c) { // SyntaxError
return a + a + c;
}Це запобігає помилкам і робить код передбачуванішим.
5. Забороняє видалення змінних, функцій і параметрів
Без строгого режиму:
var a = 1;
delete a; // falseЗ "use strict":
"use strict";
var a = 1;
delete a; // SyntaxErrorУ строгому режимі не можна видаляти те, що не є властивістю об'єкта.
6. Забороняє присвоєння значення NaN, undefined, Infinity
"use strict";
undefined = 5; // TypeError
NaN = 123; // TypeError
Infinity = 42; // TypeError7. Покращує безпеку eval
Без строгого режиму eval може створювати змінні в поточному контексті:
eval("var x = 10;");
console.log(x); // 10Зі строгим режимом eval створює власну область видимості:
"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 | Заборонено |
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.