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
помогите понять код...а именно эти строки
return func.apply(this, [].slice.call(arguments, 1));
return [].reduce.call(arguments, function(a, b) {
return a * b;
});
return func.apply(this, [].slice.call(arguments, 1));
От arguments отрезается первый аргумент (это func), а хвост ([].slice.call(arguments, 1)) передаётся в apply.
var a = [func, 1, 2, 4];
a.slice(1); // [1, 2, 4]
Поскольку arguments - это не настоящий массив, то arguments.slice использовать нельзя, поскольку такого метода нет. Вместо этого к ним применяется метод массива Array.prototype.slice - в более короткой записи [].slice - доступ через ненужный инстанс вместо непосредственного.
return [].reduce.call(arguments, function(a, b) {
return a + b;
});
Обычное применение функции reduce. По той же причине, что и выше, вызов через метод ненужного массива.
Продвижение своими сайтами как стратегия роста и независимости