Перепишите суммирование аргументов
важность: 5
Есть функция sum, которая суммирует все элементы массива:
function sum(arr) {
return arr.reduce(function(a, b) {
return a + b;
});
}
alert( sum([1, 2, 3]) ); // 6 (=1+2+3)
Создайте аналогичную функцию sumArgs(), которая будет суммировать все свои аргументы:
function sumArgs() {
/* ваш код */
}
alert( sumArgs(1, 2, 3) ); // 6, аргументы переданы через запятую, без массива
Для решения примените метод reduce к arguments, используя call, apply или одалживание метода.
P.S. Функция sum вам не понадобится, она приведена в качестве примера использования reduce для похожей задачи.
Первый вариант
function sumArgs() {
// скопируем reduce из массива
arguments.reduce = [].reduce;
return arguments.reduce(function(a, b) {
return a + b;
});
}
alert( sumArgs(4, 5, 6) ); // 15
Второй вариант
Метод call здесь вполне подойдёт, так как требуется вызвать reduce в контексте arguments с одним аргументом.
function sumArgs() {
// запустим reduce из массива напрямую
return [].reduce.call(arguments, function(a, b) {
return a + b;
});
}
alert( sumArgs(4, 5, 6) ); // 15