当前位置: 首页 > news >正文

js手写——函数柯里化

// 库里化:将多参数函数转成单参数函数链 -> fn(a,b,c) -> fn(a)(b)(c)// 如何知道参数收集完:比较fn.length(形参个数)和已经收集的个数,够了就执行,不够就返回新函数继续收集// 根据fn.length进行定长判断的版本constcurry=(fn)=>{returnfunctioncurried(...args){if(args.length>=fn.length){returnfn.apply(this,args);}else{return(...rest)=>curried(...args,...rest);}}}/* // 测试 const add = (a,b,c) => a+b+c; const curryAdd = curry(add); console.log(curryAdd(1)(2)(3)); console.log(curryAdd(1,2)(3)); console.log(curryAdd(1,2,3)); console.log(curryAdd(1,2,3,4)); */// 占位符版本const_=Symbol('placeHolder');constcurry2=(fn)=>{returnfunctioncurried(...args){// 检查已有的非占位参数是否已经够了constcompleted=args.length>=fn.length&&args.slice(0,fn.length).every(arg=>arg!==_);if(completed)returnfn.apply(this,args);// 参数不够,返回一个接受新参数的函数return(...next)=>{// 遍历老参数,遇到_就用新参数填坑,剩下的追加到后面constcombineArgs=args.map(arg=>(arg===_&&next.length>0)?next.shift():arg).concat(next);returncurried(...combineArgs);}}}// 测试constlogABC=(a,b,c)=>console.log(a,b,c);constcurried=curry2(logABC);curried(_,2)(1,3);curried(1)(_,3)(2);curried(_,_,3)(1)(2)
http://www.jsqmd.com/news/514799/

相关文章:

  • JAVA同城预约服务预约理发系统源码支持小程序+公众号+H5
  • 别只盯着Code大小!KEIL编译结果里RO-data、RW-data、ZI-data的隐藏信息与实战优化
  • OpenClaw学习总结_I_核心架构系列(3):Context管理详解
  • 【工业质检实战】基于QT6.9+ONNX Runtime部署YOLO11,实现电容极性自动识别(附完整C++源码)
  • php方案 大文件排序: 如何在 PHP 内存限制为 128MB 的情况下,对 100GB 的日志文件进行快速排序??
  • 针对长上下文场景,OpenClaw 的注意力机制做了哪些优化?是否采用了滑动窗口或稀疏注意力?
  • 嵌入式系统设计范式转移:从单点监测到智能感知网络的重构
  • Redis高频面试题(含标准答案,覆盖基础+进阶+实战)
  • 探索基于SHO-CNN-SVM的图像识别模型
  • LeRobot多臂机器人协同控制系统开发实战指南:从理论到工业应用
  • 2026年电动夹爪品牌推荐,高效夹持实用技巧分享 - 品牌2026
  • 客观事实:CRUD已死!AI接管代码库的2026,程序员如何靠“向量引擎”完成阶级跃迁?
  • 四川成都名表保养维修可靠机构推荐:成都奢侈品回收门店联系方式、成都正规奢侈品回收电话、成都闲置奢侈品回收机构、成都附近奢侈品回收电话选择指南 - 优质品牌商家
  • 币安新币(IEO)上市能无脑冲吗?242个标的+高频K线回测背后的真相
  • 单屏效率低?ParsecVDisplay让你的电脑秒变多屏工作站
  • 05-FreeRTOS的移植与适配
  • 2026水利建设水泥管优质供应商推荐榜:水泥电线杆拉盘、水泥电线杆配件、电力工程水泥电线杆、线路改造水泥电线杆选择指南 - 优质品牌商家
  • VCS仿真器配置全攻略:从基础选项到高级调试技巧
  • 雷池(Safeline)通过 Docker 安装 Lucky 实现DDNS、反向代理、重定向
  • HEIC缩略图预览:让Windows系统轻松识别苹果照片的实用工具
  • COMSOL中短电弧加工、电火花加工与激光打孔最新版本:相变、反冲压力与弱贡献的研究
  • windows10/11 通过nodejs安装 claude code + minimaxi2.7
  • SystemVerilog验证进阶:uvm_cmdline_processor与DPI的完美结合(含源码解析)
  • 2026年伺服电爪品牌推荐,伺服控制精准度测评指南 - 品牌2026
  • Flux.1-Dev深海幻境部署实战:Win10系统本地GPU环境搭建指南
  • DFS深度优先搜索:核心原理+模板+力扣例题
  • Hyper-v 中windows虚机 里面部署Open Claw要点
  • VS Code搭建STM32嵌入式开发环境(GCC+OpenOCD+Makefile)
  • CY8CMBR3102电容式土壤湿度传感器Arduino驱动详解
  • STM32F4 USB主机库:轻量级HID与MSC设备支持