利用了 Function.prototype.bind
使一个函数拥有预设的初始参数。
const add = (a: number, b: number, c: number) => a + b + c
const add2 = add.bind(add, 1)
// 得到 add2 = (b: number, c: number) => 1 + b + c
console.log(add2(2, 3))
递归进行以上步骤就得到柯理化。
const curry = fn => arg => (fn.length === 1 ? fn(arg) : curry(fn.bind(fn, arg)))
console.log(curry(add)(1)(2)(3))