1. Что делает функция add? Предположу, что слудующее:
function add() {
var sum = 0, i = arguments.length;
while (i--) {
sum += arguments[i];
}
return sum;
}
2. Что делает Function.method? Скорее всего это какое-то сокращение для defineProperty и можно записать так:
Function.prototype.curry = function () {
var slice = Array.prototype.slice,
args = slice.apply(arguments), // массив аргументов [1]
that = this; // ссылка на функцию add
return function () {
return that.apply(null, args.concat(slice.apply(arguments)));
};
};
метод curry возвращает новую функцию, которая вызывает функцию add с аргументами 1 и 6
запишу чуть более понятно:
Function.prototype.curry = function () {
var boundArgs = Array.from(arguments), // массив запоминающихся аргументов [1]
func = this; //ссылка на функцию add
return function () {
var newArgs = Array.from(arguments), // массив новых аргументов [6]
allArgs = boundArgs.concat(newArgs); // массив всех аргументов [1, 6]
return func.apply(null, allArgs); // вызываем функцию add(1, 6)
};
};