前端小技巧: TS实现柯里化函数

实现 curry 函数,把其他函数柯里化

  • curry 返回一个函数fn
  • 执行fn, 中间状态返回函数,如 add(1), 或者 add(1)(2)
  • 最后返回执行结果,如 add(1)(2)(3)
ts 复制代码
function curry(fn:Function) {
  const fnArgsLen = fn.length // 传入函数的参数长度
  let args:any[] = []
  // ts中,独立的函数,this需要生命类型
  function calc(this:any, ...newArgs:any[]) {
    // 积累参数
    args = [
      ...args,
      ...newArgs,
    ]
    if (args.length < fnArgsLen) {
      // 参数不够,返回函数
      return calc
    } else {
      // 参数够了,返回执行结果
      return fn.apply(this, args.slice(0, fnArgsLen))
    }
  }
  return calc
}

function add(a: number, b: number, c: number):number {
  return a + b + c
}

const curryAdd = curry(add)
const curryAdd = curry(add)

curryADD(10)(10)(10)
相关推荐
袋鱼不重10 小时前
我的神奇同事,AI 用多了居然写了个 Open In Codex
前端·后端·ai编程
Fireworks11 小时前
深入vue3源码解读 -- 1、响应式的基础概念
前端
程序员黑豆11 小时前
JDK 下载安装与配置详细教程
java·前端·ai编程
hunterandroid11 小时前
文件存储:内部存储与外部存储
前端
NorBugs11 小时前
飞机大战 Low 版 (Made in AI)
前端
angerdream12 小时前
Android手把手编写儿童手机远程监控App之agentweb如何实现全屏
前端
星栈12 小时前
10 分钟跑起第一个 Dioxus 应用:`dx` CLI、`rsx!` 和热更新好不好用
前端·rust·前端框架
奋斗吧程序媛12 小时前
补充一个小知识点:有关@click.native
前端·vue.js
触底反弹12 小时前
🚀 手把手用 HTML5 Canvas 从零打造飞机大战游戏,代码全开源!
前端·javascript·canvas
DJ斯特拉12 小时前
axios快速使用
开发语言·前端·javascript