При объявлении цикла, мы присваиваем значение (let i = 0), и это значение не может быть изменено снаружи.
Каждый раз когда будет вызываться данная функция с циклом, i в данном случае всегда будет 0 на первой итерации.
И как второй вариант, мы можем передать в функцию аргумент который будет задавать значение счетчика i.
Так почему в функциональном программировании нельзя применять циклы?
Дополнение:
Мой вопрос можно перефразировать так: есть ли рациональный смысл соблюдать данные правила абсолютно и без исключений?
Вот пример:
const i = 666;
function count (a,b) {
for (let i = 0; i < 10; i++) {
console.log((a+b)*i);
}
}
count(1,2);
console.log(i);
Данная функция чистая: она всегда будет давать один и тот же результат при одинаковых аргументах, и она не меняет какие-либо переменные вне себя и в глобальной области видимости. Получается полный отказ от циклов, это как заповедь: "Так сказал создатель, просто следуй этому правилу, не задавай вопросов".