Что такое чистая функция?
Короткий ответ
Чистая функция при одинаковых входах возвращает одинаковый результат и не меняет внешнее состояние. Запись в DOM, отправка запроса и изменение переданного объекта - побочные эффекты.
Разбор
Расчет total(price, quantity) может быть чистым. Если он читает изменяемую глобальную скидку или Date.now(), результат уже зависит от скрытых входов.
Чистые вычисления проще тестировать отдельно от браузера и сети. Менять созданный внутри функции локальный массив можно, если это не меняет наблюдаемые данные снаружи.