Ответ
use strict — это директива, которая включает строгий режим выполнения JavaScript. В этом режиме код выполняется с более строгими правилами, что помогает избегать ошибок и потенциальных проблем.
Основные отличия:
- Запрещает неявное создание глобальных переменных (без
var,let,const). - Запрещает дублирование параметров функции.
- Запрещает использование зарезервированных слов (например,
eval,arguments) как переменных. thisв глобальной области становитсяundefined(в обычном режиме —window).
Пример:
'use strict';
x = 10; // Ошибка: переменная не объявлена
function sum(a, a) { // Ошибка: дублирование параметров
return a + a;
}
Строгий режим можно включать для всего файла или отдельной функции. Рекомендуется использовать всегда для более предсказуемого кода.
Ответ 18+ 🔞
А, слушай, смотри, сейчас тебе про 'use strict' объясню, но так, чтобы ты реально понял, а не просто строчку в код вставил и забыл. Это ж как предупреждение от самого языка, типа: «Э, дружок-пирожок, сейчас будем писать по-взрослому, без детских лепетов».
Представь себе обычный JS — это как бардак в твоей комнате. Можно кидать носки куда попало, объявлять переменные просто так (x = 5;), и они волшебным образом появляются в глобальной зоне видимости, как эти носки на люстре. Вроде работает, но потом соседи (другие скрипты) приходят и охуевают: «Чей это, блядь, носок в моём стакане?».
А 'use strict'; — это твоя мамка, которая заходит и говорит: «Всё, сынок, пиздец твоему беспределу». И начинается:
-
Про глобальные переменные. Без этой директивы можно было написать
pidor = 'Vasya';— и вуаля, глобальная переменнаяpidorсоздана. В строгом режиме тебе тут же в консоль прилетитReferenceError, мол, «Вася, ты ебанутый? Сначала объяви (let,const,var), потом используй». Это спасает от адских багов, когда ты в сотне файлов случайно перетираешь какую-нибудь важную переменную. -
Про дублирование параметров. Раньше можно было написать функцию
function sum(a, b, a) { ... }. И что? А нихуя, третийaпросто перезатрет первый. Зачем это нужно? Низачем! Это ошибка, тупость, распиздяйство. Строгий режим на таком коде просто сломается и скажет: «Чувак, у тебя в параметрах один и тот жеaдва раза, ты совсем, блядь, конченый?». -
Про зарезервированные слова. Раньше можно было назвать переменную
let eval = 'читер';илиvar arguments = [];. Это как назвать сына «Блядь» — вроде можно, но потом будут проблемы. Строгий режим запрещает такое извращение. -
Про
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';. Это не какая-то опция для ботанов, а базовый способ не наебнуться на ровном месте. Это как пристегнуться в машине: можно и без ремня, но потом при лобовом стекло охуевает от твоих зубов.