Тема: curry javascript
Показать сообщение отдельно
  #2 (permalink)  
Старый 13.10.2013, 13:10
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

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)
	};
};
Ответить с цитированием