Что такое use strict

Ответ

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

Основные отличия:

  1. Запрещает неявное создание глобальных переменных (без var, let, const).
  2. Запрещает дублирование параметров функции.
  3. Запрещает использование зарезервированных слов (например, eval, arguments) как переменных.
  4. this в глобальной области становится undefined (в обычном режиме — window).

Пример:

'use strict';
x = 10; // Ошибка: переменная не объявлена

function sum(a, a) { // Ошибка: дублирование параметров
  return a + a;
}

Строгий режим можно включать для всего файла или отдельной функции. Рекомендуется использовать всегда для более предсказуемого кода.

Ответ 18+ 🔞

А, слушай, смотри, сейчас тебе про 'use strict' объясню, но так, чтобы ты реально понял, а не просто строчку в код вставил и забыл. Это ж как предупреждение от самого языка, типа: «Э, дружок-пирожок, сейчас будем писать по-взрослому, без детских лепетов».

Представь себе обычный JS — это как бардак в твоей комнате. Можно кидать носки куда попало, объявлять переменные просто так (x = 5;), и они волшебным образом появляются в глобальной зоне видимости, как эти носки на люстре. Вроде работает, но потом соседи (другие скрипты) приходят и охуевают: «Чей это, блядь, носок в моём стакане?».

А 'use strict'; — это твоя мамка, которая заходит и говорит: «Всё, сынок, пиздец твоему беспределу». И начинается:

  1. Про глобальные переменные. Без этой директивы можно было написать pidor = 'Vasya'; — и вуаля, глобальная переменная pidor создана. В строгом режиме тебе тут же в консоль прилетит ReferenceError, мол, «Вася, ты ебанутый? Сначала объяви (let, const, var), потом используй». Это спасает от адских багов, когда ты в сотне файлов случайно перетираешь какую-нибудь важную переменную.

  2. Про дублирование параметров. Раньше можно было написать функцию function sum(a, b, a) { ... }. И что? А нихуя, третий a просто перезатрет первый. Зачем это нужно? Низачем! Это ошибка, тупость, распиздяйство. Строгий режим на таком коде просто сломается и скажет: «Чувак, у тебя в параметрах один и тот же a два раза, ты совсем, блядь, конченый?».

  3. Про зарезервированные слова. Раньше можно было назвать переменную let eval = 'читер'; или var arguments = [];. Это как назвать сына «Блядь» — вроде можно, но потом будут проблемы. Строгий режим запрещает такое извращение.

  4. Про this. Вот это вообще прикол. В обычном режиме, если ты вызовешь функцию просто так, без контекста, this внутри неё будет ссылаться на глобальный объект (window в браузере). Представь: пишешь ты функцию function sayHi() { this.name = 'Петя'; }, вызываешь её просто sayHi(), и внезапно у глобального window появляется свойство name со значением «Петя». Полный пиздец! В строгом режиме в такой ситуации this будет undefined. И когда ты попытаешься сделать this.name = 'Петя', получишь ошибку. Это защищает от случайного пиздеца в глобальной области.

Вот тебе пример, как оно ломается:

'use strict';

x = 10; // ReferenceError: x is not defined. Объявляй переменную, мудак!

function sum(a, a, c) { // SyntaxError: Duplicate parameter name not allowed in this context
  return a + a + c; // Какой тут, нахуй, 'a' имеется в виду? Первый или второй? Вот и язык не понимает.
}

let eval = 10; // SyntaxError: Unexpected eval or arguments in strict mode

Пихать эту строку можно либо в самое начало файла (тогда весь файл в строгом режиме), либо внутрь функции — тогда только она будет подчиняться строгим правилам.

Короче, суть в чём: всегда используй 'use strict';. Это не какая-то опция для ботанов, а базовый способ не наебнуться на ровном месте. Это как пристегнуться в машине: можно и без ремня, но потом при лобовом стекло охуевает от твоих зубов.