Вы получаете бесконечный цикл, потому что вы увеличиваете целевое значение на единицу, но вы запускаете оператор for
с нуля, и это значение не изменяется, пока не достигнет конца стека.
for (var i = 0; i <= a; i++) {
console.log(i);
iterate(i + 1);
}
Это означает, что с первым нулевым значением вы снова вызываете функцию, и эта функция снова вызывает себя и так далее.
Результатом является эта непроверенная ошибка:
RangeError: Maximum call stack size exceeded