@olya_097

Код объясните,пожалуйста на JS(комментарии,если можно).Особенно интересует зачем здесь this?

Напишите функцию applyAll(func, arg1, arg2...), которая получает функцию func и произвольное количество аргументов.

Она должна вызвать func(arg1, arg2...), то есть передать в func все аргументы, начиная со второго, и возвратить результат.

function sum() {
return [].reduce.call(arguments, function(a, b) {
return a + b;
});
}

function mul() {
return [].reduce.call(arguments, function(a, b) {
return a * b;
});
}

function applyAll(func) {
return func.apply(this, [].slice.call(arguments, 1));
}

alert( applyAll(sum, 1, 2, 3) ); // 6
alert( applyAll(mul, 2, 3, 4) ); // 24
alert( applyAll(Math.max, 2, -2, 3) ); // 3
alert( applyAll(Math.min, 2, -2, 3) ); // -2
  • Вопрос задан
  • 122 просмотра
Пригласить эксперта
Ответы на вопрос 2
  • @amokrushin
    this в данном примере не нужен, можно заменить на что угодно null, 1, NaN, undefined...
    В остальном этот код рассматривает скорее костыли вокруг arguments нежели применение контекста вызова.
    Единственное что сейчас нужно знать про "arguments" - никогда его не использовать.
    В современном js этот код может выглядеть как-то так:
    function sum(...args) {
      return args.reduce((acc, val) => acc + val);
    }
    
    function mul(...args) {
      return args.reduce((acc, val) => acc * val);
    }
    
    function applyAll(func, ...values) {
      return func(...values);
    }
    
    alert( applyAll(sum, 1, 2, 3) ); // 6
    alert( applyAll(mul, 2, 3, 4) ); // 24
    alert( applyAll(Math.max, 2, -2, 3) ); // 3
    alert( applyAll(Math.min, 2, -2, 3) ); // -2
    Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы