Недавно проверял свой код через линтер и получил предупреждение о том, что нужно добавить директиву '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, а со строгим режимом - ошибку. Ещё блокирует зарезервированные слова как имена переменных. Включаю во всех проектах - код надёжнее.