как на самом деле работает функция каррирования javascript?

#javascript #function #currying #curry

Вопрос:

у меня было много проблем с пониманием того, как на самом деле работает эта функция каррирования и что именно она делает?

    Function.prototype.curry = function() {
   var fn = this, args = Array.prototype.slice.call(arguments);
   return function() {
     return fn.apply(this, args.concat(
       Array.prototype.slice.call(arguments)));
   };
 };
 

потому что я знаком только с этим типом функции каррирования:

 function curry(f) { 
  return function(a) {
    return function(b) {
      return f(a, b);
    };
  }
 

Комментарии:

1. Ну, это не работает. На самом деле она выполняет частичное применение, а не каррирование .

2. Более современная версия первого фрагмента (и с использованием функции вместо метода) будет (f, ...pargs) => (...args) => f(...pargs, ...args) , тогда как ваша curry = (f) => (a) => (b) => f(a, b)

3. @ceving Да, мне неясно, какая конкретная проблема OP должна понимать функцию, и сколько деталей они ожидают от объяснения » что именно он делает «. Вот почему я не могу ответить, а только предоставить полезные (возможно, проницательные) комментарии.

4. @Bergi Я думаю, что комментарий к ответу — хорошее место, чтобы указать это.