Skip to content

Latest commit

 

History

History
38 lines (25 loc) · 1.29 KB

curry.md

File metadata and controls

38 lines (25 loc) · 1.29 KB
标题 标签
curry(函数柯里化。) function,recursion,advanced(函数,递归,高级的)

函数柯里化。

  • 使用递归。
  • 如果提供的参数(args)数量足够,则调用传递的函数 fn
  • 否则,使用 Function.prototype.bind() 返回一个柯里化函数 fn ,它需要其余的参数。
  • 如果你想对一个接受可变数量参数的函数(可变参数函数,例如 Math.min())进行 curry,你可以选择将参数数量传递给第二个参数 arity。

代码如下:

const curry = (fn, arity = fn.length, ...args) =>
  arity <= args.length ? fn(...args) : curry.bind(null, fn, arity, ...args);

ts 代码如下:

调用方式:

curry(Math.pow)(2)(10); // 1024
curry(Math.min, 3)(10)(50)(2); // 2

应用场景

以下是一个实战示例:

结果如下:

<iframe src="codes/javascript/html/curry.html"></iframe>