@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
  • Вопрос задан
  • 129 просмотров
Пригласить эксперта
Ответы на вопрос 2
xmoonlight
@xmoonlight
https://sitecoder.blogspot.ru
https://learn.javascript.ru/call-apply
Советую изучить весь раздел "Методы объектов и контекст вызова".
Ответ написан
@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
Похожие вопросы