Currying
const add = (a) => (b) => a + b;
const addTwo = add(2);
console.log(addTwo(3));
Partial application
const add = (a, b) => a + b;
const addTwo = add.bind(null, 2);
console.log(addTwo(3));
Ближе к жизни
const greet = (greeting) => (name) => `${greeting}, ${name}`;
const sayHi = greet("Hi");
["Ann", "Bob"].map(sayHi);
const logWithLevel = (level, message) => console.log(`[${level}] ${message}`);
const logError = logWithLevel.bind(null, "error");
logError("failed");
Итог: curry — f(a)(b); partial — f с уже подставленными аргументами, остальное позже.