Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.10.2013, 14:38
Аспирант
Отправить личное сообщение для linklee Посмотреть профиль Найти все сообщения от linklee
 
Регистрация: 15.07.2013
Сообщений: 49

curry javascript
Functions are values, and we can manipulate function values in interesting ways.
Curryingallows us to produce a new function by combining a function and an
argument:
var add1 = add.curry(1);
document.writeln(add1(6)); // 7

Function.method('curry', function ( ) {
 var slice = Array.prototype.slice,
 args = slice.apply(arguments),
 that = this;
 return function ( ) {
 return that.apply(null, args.concat(slice.apply(arguments)));
 };
});

нашел такое в одной книжке
как это вообще работает никто не обьяснит?
Ответить с цитированием
  #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)
	};
};
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книга: JavaScript. Сильные стороны Magneto Учебные материалы 16 21.04.2013 15:28
Интерпретатор Java на JS kobezzza Оффтопик 24 11.10.2012 18:32
Первый Moscow JavaScript Meetup korenyushkin Общие вопросы Javascript 0 26.07.2011 15:23
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34