JSFiddle - React, Tailwind, and code Playground

JavaScript

function rsum(x, n){
    // shift is slow.
    return x.length === 1 ? x[0] : ((n = x.shift()), n + rsum(x));
}

function isEmpty(xs) {
    return xs.length === 0;
}

function sumHaskellLike(x) {
    for (var _len = arguments.length, xs = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
        xs[_key - 1] = arguments[_key];
    }

    return isEmpty(xs) ? x : x + sumHaskellLike.apply(undefined, xs);
}

var iterations = 4000,
    results = Array(iterations);

console.time('rsum');
while(iterations--){
    results[iterations] = rsum([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]);
}
console.timeEnd('rsum');
results.sort();


var iterations = 4000,
    results = Array(iterations);

console.time('hsum');
while(iterations--){
    results[iterations] = sumHaskellLike(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
}
console.timeEnd('hsum');
results.sort();

console.log(rsum2([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]));