Что делает этот код на пальцах?
Скорее всего вы непоняли момент с передачей функции в качестве параметра.
Да, в javascript в качестве параметра можно передавать не только числа, строки и массивы, но и функции.
Функция может быть объявлена выше и иметь имя, тогда в качестве параметра передается ее имя (без скобок).
В данном случае функция является анонимной (без имени) и сразу объявляется в том месте, где она передается в виде параметра.
Функция reduce принимает следующие параметры: массив, функция от двух переменных, начальная сумма
combine(current, array[i]) - это вызов переданной в параметрах функции с двумя аргументами.
Сейчас, суммирует все значения массива со стартовым значением.function reduce(array, combine, start) {
    var current = start; // записываем стартовое значение в основную переменную
    for (var i = 0; i < array.length; i++) // в цикле...
        current = combine(current, array[i]);  // ... применяем введенную функцию (см функцию combine)
    return current; // выводим значение из функции.
}

console.log(reduce([1, 2, 3, 4], function(a, b) {
    return a + b; // суммируем аргументы (в нашем случае добавляем к уже подсчитанному новое значение)
}, 0));
/* Данная [reduce] функция выполняет применение введенной
 * функции (combine) ко всем значениям массива (array), с учетом
 * стартового значения (start)
*/