柯里化一个函数。
使用递归。 如果提供的参数(args
)数量足够,调用传递函数 fn
。否则返回一个柯里化后的函数 fn
,期望剩下的参数。如果你想柯里化一个接受可变参数数量的函数(可变参数数量的函数,例如 Math.min()
),你可以选择将参数个数传递给第二个参数 arity
。
const curry = (fn, arity = fn.length, ...args) => arity <= args.length ? fn(...args) : curry.bind(null, fn, arity, ...args);
curry(Math.pow)(2)(10); // 1024 curry(Math.min, 3)(10)(50)(2); // 2