Я знаю его старый поток, но мне придется показать, как это используется в библиотеках javascript:
Я буду использовать библиотеку lodash.js для конкретного описания этих понятий.
Пример:
var fn = function(a,b,c){
return a+b+c+(this.greet || ‘');
}
Частичное применение:
var partialFnA = _.partial(fn, 1,3);
Карри:
var curriedFn = _.curry(fn);
Связывание:
var boundFn = _.bind(fn,object,1,3 );//object= {greet: ’!'}
использование:
curriedFn(1)(3)(5); // gives 9
or
curriedFn(1,3)(5); // gives 9
or
curriedFn(1)(_,3)(2); //gives 9
partialFnA(5); //gives 9
boundFn(5); //gives 9!
разница:
после карри мы получаем новую функцию без предустановленных параметров.
после частичного применения мы получаем функцию, которая связана с некоторыми предварительно связанными параметрами.
в привязке мы можем связать контекст, который будет использоваться для замены «this», если не привязано, по умолчанию для любой функции будет область окна.
Совет: нет необходимости изобретать велосипед. Частичное применение / связывание / каррирование очень тесно связано. Вы можете увидеть разницу выше. Используйте это значение где угодно, и люди поймут, что вы делаете, без проблем с пониманием, плюс вам придется использовать меньше кода.