O que está currying em JavaScript

// Currying :
//- Currying is an advanced technique of working with functions.
function sum(a) {
  return function (b) {
    return function (c) {
      return function (d) {
        console.log("sun is:::", a + b + c + d);
      };
    };
  };
}
sum(5)(7)(3)(20);
Abhishek