Strict Mode
“use strict” включён по умолчанию в ESM-модулях и телах классов; он запрещает ряд “silent” ошибок, меняет семантику this (нет coercion к global) и связывает руки оптимизаторам, которые не могут работать с with и динамическим eval.
// Sloppy vs Strict: разница в thisfunction sloppyThis() { return this; }function strictThis() { 'use strict'; return this; }
sloppyThis(); // window (browser) / global (Node.js) — тихая ловушкаstrictThis(); // undefined — явная ошибка лучше тихого бага
// В классах strict mode всегда включён:class MyClass { method() { return this; }}const { method } = new MyClass();method(); // undefined — не global! (отвязан от экземпляра)
// ESM (.mjs): весь файл в strict mode, не нужна директива// <script type="module">: тоже строгий режим// Запрещённые конструкции в strict mode'use strict';
// 1. Необъявленные переменные// x = 5; // ReferenceError (в sloppy: тихое создание global)
// 2. Запись в read-only/non-writableconst obj = Object.freeze({ x: 1 });// obj.x = 2; // TypeError (в sloppy: тихо игнорируется!)
// 3. Дублирование параметров// function dup(a, a) {} // SyntaxError
// 4. with statement (мешает статическому анализу scope)// with (obj) {} // SyntaxError
// 5. Удаление non-configurable// delete Object.prototype; // TypeError
// 6. eval / arguments как имена переменных// let eval = 1; // SyntaxError// Разрыв связи arguments ↔ параметры в strict modefunction sloppy(a) { arguments[0] = 99; return a; // 99 — arguments и параметры aliased в sloppy mode}
function strict(a) { 'use strict'; arguments[0] = 99; return a; // исходное значение — связь разорвана}
console.log(sloppy(1)); // 99console.log(strict(1)); // 1
// Влияние на V8: с arguments object (escaped) нельзя применить// escape analysis → нельзя выделить a на стеке// rest params (...args) строгие по умолчанию и оптимизируются лучшеИтог: Strict mode устраняет silent failures, разрывает магические связи (arguments, this coercion), запрещает with и дублирование параметров; в современном коде включён по умолчанию через ESM и class bodies.