Проблема

Разработчики JavaScript часто добавляют в свой код строку "use strict". Что делает "use strict" в JavaScript? Какова причина его использования? Есть ли преимущества от его использования?

Решение

Директива "use strict" включает строгий режим JavaScript.

Строгий режим JavaScript был введен в ECMAScript 5. Он обеспечивает более строгий синтаксический анализ и обработку ошибок в коде во время выполнения. Это также помогает вам писать более чистый код и выявлять ошибки и ошибки, которые в противном случае могли бы остаться незамеченными.

Применение

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

Включите строгий режим глобально, добавив строку "use strict" в качестве первого оператора в вашем файле. Весь последующий код в скрипте будет выполняться в строгом режиме.

// First line inside a .js file
'use strict';
// rest of the script

Включите строгий режим локально, добавив строку "use strict" в качестве первого оператора внутри функции. Локальное использование строгого режима внутри функции будет обеспечивать более строгий синтаксический анализ только в контексте этой функции.

// Inside a function
function strict_function() {
  'use strict'; // rest of the function
}

Важно отметить, что модули JavaScript по умолчанию находятся в строгом режиме.

Преимущества использования строгого режима

Включение строгого режима в вашем коде имеет много преимуществ.

Вот некоторые примеры:

Предотвращение случайного создания глобальных переменных

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

'use strict';
x = 9; // ReferenceError: x is not defined
function strict_function() {
  'use strict';
  x = 'I am a strict function';
  console.log(x);
}
strict_function(); // ReferenceError: x is not defined

Обычный сценарий, в котором вы можете случайно создать глобальные переменные, находится внутри циклов for. При включенном строгом режиме JavaScript выдаст ошибку, если вы забудете добавить ключевое слово let перед переменной счетчика цикла (counter в следующем примере):

function catchTheProblem() {
  'use strict';
  for (counter = 0; counter < 10; counter++) {
    console.log('Catch me if you can!');
  }
}
catchTheProblem(); // ReferenceError: counter is not defined

Если вы не используете здесь строгий режим, JavaScript создаст глобальную переменную с именем counter.

Исправляйте опечатки в именах переменных

Если вы не используете строгий режим, опечатка может создать новую переменную, что может привести к ошибкам в дальнейшем. Например:

'use strict';
let misspelledVariable;
misspelleVariable = 9; // This line will throw en error due to // misspelling of "misspelledVariable"

Защита от случайного удаления

Удаление переменной, функции или аргумента приведет к ошибке:

'use strict';
let a = 9;
delete a; //This will cause an error
function testFunction() {}
delete testFunction; // This will cause an error
function testWithArgs(arg) {
  delete arg; // This will cause an error
}

Запретить дублирование имен параметров в функции

Дублирование имен параметров приведет к ошибке:

function test(arg1, arg1) {} // This will cause an error

Запретить запись в свойства, доступные только для чтения

Если вы установите для объекта доступное для записи значение false, а затем попытаетесь присвоить объекту новое значение, строгий режим выдаст ошибку:

'use strict';
const obj = {};
Object.defineProperty(obj, 'x', { value: 0, writable: false });
obj.x = 9; // This will cause an error

Удачного кодирования. ⭐️

Надеюсь, вы узнали что-то сегодня! Перед тем, как ты уйдешь:

🚀👉 Cизучите основы JS и найдите прекрасную работу