Для чего нужна директива 'use strict' в JavaScript и какова её цель?

Вопрос про строгий режим JavaScript

Недавно проверял свой код через линтер и получил предупреждение о том, что нужно добавить директиву 'use strict'; в начало файла. После того как добавил эту строчку, предупреждения исчезли.

'use strict';

function calculateTotal(price, tax) {
    result = price + (price * tax); // без strict mode это создаст глобальную переменную
    return result;
}

let finalPrice = calculateTotal(100, 0.15);
console.log(finalPrice);

Понимаю что это как-то связано с тем, как браузер обрабатывает JavaScript код, но не очень понятно какие именно изменения это вносит.

Основные вопросы:

  • Что именно делает 'use strict'; в JavaScript?
  • Какие ограничения или изменения в поведении она вводит?
  • Стоит ли её использовать в новых проектах?
  • Поддерживается ли эта директива современными браузерами?

Буду благодарен за подробные объяснения с примерами!

В твоем коде как раз видно главную проблему - без strict mode переменная result становится глобальной и может поломать другие части программы. Кстати, замечал разницу в скорости с use strict? Слышал, что JS движки лучше оптимизируют такой код.

Эта директива реально полезная! Долго игнорировал её, пока не словил баг из-за случайной глобальной переменной. Строгий режим заставляет браузер придирчивее проверять код - нельзя юзать переменные без var, let или const. Запрещает дублировать параметры функций и другие опасные штуки. Сейчас это стандарт, все браузеры поддерживают. Кстати, в ES6 модулях strict mode включается сам.

Она ловит ошибки раньше. Без strict mode косяки проходят незаметно и вылезают в продакшене. Попытка удалить неудаляемое свойство просто вернёт false, а со строгим режимом - ошибку. Ещё блокирует зарезервированные слова как имена переменных. Включаю во всех проектах - код надёжнее.