Хоть и мелочь, но для кроссплатформенности не рекомендуется передача arguments в другие функции (типа Array.prototype.slice.call(arguments) ), ибо в V8 это убивает оптимизацию функции, и это, как я знаю, все еще
актуально.
Кроме того, нет никакой причины использовать slice перед вызовом reduce- все методы массива умеют переваривать массивоподобные объекты:
let sum= Array.prototype.reduce.call(arguments, (acc, value)=>acc+value, 0))
Но для оптимизации кода под V8 нужно руками формировать массив с arguments через обход циклом for, либо написать helper, вроде
function toArray() {
let len = arguments.length;
if (len === 0)return [];
return len > 1 ? Array.apply(null, arguments) : [arguments[0]];
}
И вызывать его исключительно через .apply
let sum= toArray.apply(null, arguments).reduce( (acc, value)=>acc+value, 0))