По какому принципу работает reduce с массивом, как значением по умолчанию?
function test() {
  const a = [1];
  return a[0] += 3; // что вы вернет?
}
По вашей логике массив a?
На самом деле вернется результат операции сложения, то есть 4.
А если добавить оператор запятую, то вернет то, что после запятой, что и требуется для reduce.

Распишем подробно что происходит внутри reduce c запятой и без.
// с запятой
array.reduce((a,b,i)=>function(){
  const sum = a[i%2] + b; // вычисление
  a[i%2] = sum; // присваивание
  return a; // возврат массива
}, [0,0]);

// без запятой
array.reduce((a,b,i)=>function(){
  const sum = a[i%2] + b; // вычисление
  a[i%2] = sum; // присваивание
  return sum; // возврат результат суммирования
   // и на следующей итерации будет ошибка из-за попытки обратиться к числу как к массиву.
}, [0,0]);
То же самое, распакованное:
array.reduce(
  (acc, current, i) => {
    acc[i % 2] += current; // к чётному/нечетному прибавить
    return acc; // вернуть массив
  },
  [0, 0]  // начальное значение
)
Перечисление через запятую всё выполнит, вернёт результат последнего:let a, b;
console.log(
  ( a = 2 + 2, b = ["QnA", "Habr", "com"].join("."), "Отметить решением" )
); 
// "Отметить решением"