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