Перепишите суммирование аргументов
важность: 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