Чистая функция в JavaScript

Определение чистой функции, простое — функция которая возвращает одинаковый результат при выполнении с тем же набором аргументов и не имеет побочных сайдэффектов (внешние переменные, callback, мутация внешнего объекта и т.д). Такие функции называют детерминированными.

На чистые функции очень просто писать unit тесты, она понятна для переиспользования и рассмотрим пару примеров:

// Базовый пример, это сумма чисел
function sum(a, b) {
  return a + b;
}

// Продвинутый пример из реальной жизни, может быть генерация ЧПУ
function translit(text){
        return text.replace( /([а-яё])|([\s_-])|([^a-z\d])/gi,
            function( all, ch, space, words, i ) {
                if ( space || words ) {
                    return space ? '-' : '';
                }
                var code = ch.charCodeAt(0),
                    next = text.charAt( i + 1 ),
                    index = code == 1025 || code == 1105 ? 0 :
                        code > 1071 ? code - 1071 : code - 1039,
                    t = ['yo','a','b','v','g','d','e','zh',
                        'z','i','y','k','l','m','n','o','p',
                        'r','s','t','u','f','h','c','ch','sh',
                        'shch','','y','','e','yu','ya'
                    ],
                    next = next && next.toUpperCase() === next ? 1 : 0;
                return ch.toUpperCase() === ch ? next ? t[ index ].toUpperCase() :
                    t[ index ].substr(0,1).toUpperCase() +
                        t[ index ].substring(1) : t[ index ];
            }
        );
}

И посмотрим какие могут быть «не чистые функции» или недетерминированные:

// использование внешних переменных, которые могут измениться
function costCalculator(a, b) {
  return a * b * CUSTOM_RATE_COEF;
}

// мутирование объекта, каллбеки
function superFunction(obj, cb) {
  obj.name = 'Иван';
  cb(obj)
}
Читайте также
SortableJS переносит списки с перетаскиванием в Microsoft Blazor
SortableJS переносит списки с перетаскиванием в Microsoft Blazor
SortableJS переносит списки с перетаскиванием в Microsoft Blazor

Разработчики преобразовали SortableJS, инструмент JavaScript для создания списков с возможностью перетаскивания, в компонент Blazor для разработки веб-приложений Microsoft, переименовав его в Blazor Sortable.

C# опережает Java по популярности языка
C# опережает Java по популярности языка
C# опережает Java по популярности языка

Язык C# от Microsoft обгоняет Java в индексе популярности языка Tiobe, и эта тенденция может вскоре привести к тому, что C# превзойдет Java.

Chrome 120 beta
Chrome 120 beta
Chrome 120 beta

Новые 7 фич для CSS. Улучшения для nesting (вложенности стилей). Создание «аккордиона» для через элемент details и многое другое.

Сжатие и распаковка в браузере с помощью Compression Streams API
Сжатие и распаковка в браузере с помощью Compression Streams API
Сжатие и распаковка в браузере с помощью Compression Streams API

С API веб-приложениям больше не нужно предоставлять собственную библиотеку сжатия или распаковки.