Example
const sum = x => y => x + y;
/* returns the number 3. 1st round of parameter are x, the second round are y*/
console.log(sum (2)(1));
// returns a function y => 2 + y
console.log(sum (2));
3
y => 2 + y
Javascript has First-Class Functions
const addPartial = x =>
(y,z) => add(x,y,z);
const add5 = addPartial(5);
const sum = add(5,6,7);
18
The same as:
const addPartial = (x,y) =>
z => add(x,y,z);
const add5and6 = addPartial(5,6);
const sum = add5and6(7);
console.log(sum);
18
and also as:
const addPartial = x =>
y => z => add(x,y,z);
const add5 = addPartial(5);
const add5and6 = add5(6);
const sum = add5and6(7)
console.log(sum);
18
And even more weird:
const addPartial = x =>
y => z => add(x,y,z);
const sum = addPartial(5)(6)(7);
console.log(sum);
18
This type of programming is currying.
Sources:
https://www.linkedin.com/learning/learning-functional-programming-with-javascript-es6-plus/currying-and-partial-application
https://medium.com/front-end-weekly/javascript-es6-curry-functions-with-practical-examples-6ba2ced003b1