Зачем нужна директива "use strict" в JavaScript и как она работает?

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

Недавно проверял свой код через различные инструменты анализа, и постоянно получаю предупреждения о том, что нужно добавить директиву “use strict” в начало файлов.

function calculateTotal(price, tax) {
    "use strict";
    result = price * (1 + tax); // без var/let/const
    return result;
}

function calculateDiscount(amount, percent) {
    discount = amount * percent; // без объявления переменной
    return discount;
}

В первой функции с use strict код выдаст ошибку, а во второй будет работать. Понимаю, что это как-то связано с режимом выполнения JavaScript, но не могу разобраться в деталях.

Хотел бы узнать:

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

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