JSFiddle - React, Tailwind, and code Playground

by Alexey

JavaScript

function curry(func) {

  return function curried(...args) {
    if (args.length >= func.length) {
      return func.apply(this, args);
    } else {
    console.log(2)
      return function(...args2) {
    console.log(args.concat(args2))
    console.log(args)
    console.log(args2)
      
        return curried.apply(this, args.concat(args2));
      }
    }
  };
}

function sum(a, b, c) {
  return a + b + c;
}

let x = sum.apply(null, [2,4,7]);
//console.log(x)

let curriedSum = curry(sum);

//console.log( curriedSum(1, 2, 3) ); // 6, всё ещё можно вызывать нормально
//console.log( curriedSum(1)(2,3) ); // 6, каррирование первого аргумента
console.log( curriedSum(1)(2)(3) ); // 6, каррирование всех аргументов