Первый вариант показывает чистую функцию, т. е. её результат вычисляется на основе её аргументов. Второй вариант показывает функцию с побочным эффектом: берётся сумма аргументов и выводится в диалоговое окно, в этом случае невозможно построить однозначную таблицу значений функции, поскольку она всегда возвращает undefined.
Побочный эффект, например, выражается в том, что вторая функция sum меняет внешний мир. (Показалось окошко)
Функция alert сама по себе имеет побочный эффект: она что-то выводит на экран.
Лучше использовать чистые функции (первый пример). Когда функция не имеет побочных эффектов, она называется чистой функцией. Чистые функции:
- проще читать
- проще отлаживать
- проще тестировать
- не зависят от порядка, в котором они вызываются
- просто запустить параллельно (одновременно)
Статьи: