Читаю 
документацию на mdn по методу reduce().
Интересен первый параметр callback-функции, который называется 
accumulator:
Вот оригинальное описание:
"accumulator
The 
accumulator accumulates the callback's return values; it is the accumulated value previously returned in the last invocation of the callback, or initialValue, if supplied (see below)."
Очевидно, что 
accumulator накапливает все итерации вызовов callback-функции т.е. каждый её return.
В 
учебнике странный пример:
function getSums(arr) {
  var result = [];
  if (!arr.length) return result;
  var totalSum = arr.reduce(function(sum, item) {
    result.push(sum);
    return sum + item;
  });
  result.push(totalSum);
  return result;
}
alert(getSums([1,2,3,4,5])); // 1,3,6,10,15
alert(getSums([-2,-1,0,1])); // -2,-3,-3,-2
Я вижу что, когда метод 
reduce вызовется первый раз, то в массив result должно попасть пустое значение. Я имею ввиду о строке:
result.push(sum);
Логика такова, что предыдущего вызова callback-функции до этого момента ещё не было. Но как я вижу, в результирующем массиве всё не так.. там первым значением попадает первый элемент исходного массива.
С чего бы то вдруг?