← Назад к вопросам

Какие знаешь особенности запуска в современном режиме?

2.3 Middle🔥 111 комментариев
#JavaScript Core

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI4 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Особенности запуска JavaScript в современном ("use strict") режиме

Запуск JavaScript в строгом режиме ("use strict") — это фундаментальная особенность современных стандартов языка. Вот ключевые аспекты его активации и отличий от устаревшего "sloppy mode".

Активация строгого режима

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

// Глобальное включение (должно быть первой инструкцией)
'use strict';

function example() {
  // Код выполняется в строгом режиме
}

// Локальное включение только для функции
function strictFunction() {
  'use strict';
  // Строгий режим активен здесь
}

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

// Модуль ES6 - автоматически в строгом режиме
export const PI = 3.14159;

Ключевые отличия от нестрогого режима

1. Обработка ошибок

  • Необъявленные переменные вызывают ошибку ReferenceError
'use strict';
x = 10; // ReferenceError: x is not defined
  • Дублирование параметров функции запрещены
function sum(a, a, c) { // SyntaxError: Duplicate parameter name
  return a + a + c;
}

2. Безопасность и предсказуемость

  • Ключевое слово this в глобальных функциях равно undefined, а не глобальному объекту
'use strict';
function showThis() {
  console.log(this); // undefined (в нестрогом: window/global)
}
  • Запрет на использование with, который затрудняет оптимизацию и анализ кода
'use strict';
with (Math) { // SyntaxError: Strict mode code may not include a with statement
  const x = cos(PI);
}

3. Ограничения на arguments и eval

  • Псевдомассив arguments не синхронизируется с параметрами
'use strict';
function noSync(a) {
  a = 2;
  console.log(a, arguments[0]); // 2, 1 (в нестрогом: 2, 2)
}
noSync(1);
  • eval не создает переменные в окружающей области видимости
'use strict';
eval('var x = 10;');
console.log(x); // ReferenceError: x is not defined

4. Запрет "опасных" операций

  • Удаление неудаляемых свойств вызывает ошибку
'use strict';
delete Object.prototype; // TypeError: Cannot delete property 'prototype'
  • Расширение неизменяемых объектов запрещено
'use strict';
Object.defineProperty({}, 'x', {value: 1, writable: false});
obj.x = 2; // TypeError: Cannot assign to read only property 'x'

Современные практики использования

  1. Автоматическое включение в инструментах сборки Современные бандлеры (Webpack, Rollup, Vite) добавляют "use strict" автоматически при транспиляции.

  2. ES6+ фичи не требуют явного указания Классы, модули, let/const и другие современные конструкции всегда работают в строгом режиме.

  3. Постепенный переход Можно мигрировать проект постепенно, включая строгий режим для отдельных модулей:

    // legacy.js - без строгого режима
    // modern-module.js - с "use strict"
    

Преимущества для разработчиков

  • Раннее выявление ошибок на этапе разработки
  • Улучшенная оптимизация движками JavaScript (V8, SpiderMonkey)
  • Чистый и предсказуемый код без скрытых глобальных переменных
  • Подготовка к будущим версиям ECMAScript, где многие особенности строгого режима станут стандартом

Важные исключения и нюансы

  • Конкатенация скриптов может вызвать проблемы, если строгий режим объявлен не первым
  • Некоторые библиотеки могут не работать в строгом режиме (устаревший код)
  • Строгий режим не включается автоматически внутри setTimeout и других оберток

Рекомендация: Всегда используйте строгий режим в новых проектах. Современный JavaScript-стек (Node.js, React, Vue, Angular) предполагает его использование по умолчанию, что делает код более безопасным, оптимизируемым и соответствующим стандартам.

Какие знаешь особенности запуска в современном режиме? | PrepBro