@Gagatyn
Самоучка

В чем ошибка использования arguments функции?

В чем ошибка? Как исправить её?
29f4cdf18c82438e8ebbe435ecd0a06e.PNG
  • Вопрос задан
  • 134 просмотра
Решения вопроса 2
teknik2008
@teknik2008
Расскажите про GOLANG. Мне интересно
arguments - это псевдомассив
var args = Array.prototype.slice.call(arguments);
var result= args.reduce((s, cur) =>{ 
      return s+cur; 
   });
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
Calc = function(){
  this.sum = function(){
    return Array
      .prototype
      .slice
      .call(arguments)
      .reduce(function(p,c){return +p+c}, 0)
  }
}

let c = new Calc;
c.sum(2,4,6) // 12
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
DIITHiTech
@DIITHiTech
Fullstack javascript developer
Хоть и мелочь, но для кроссплатформенности не рекомендуется передача 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))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы