You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript使用Currying实现日期时间格式化调用异常问题求解

问题原因

你当前实现的curry函数是固定三层嵌套的硬编码逻辑,每一层仅接收第一个入参,其余传入的参数都会被直接丢弃。所以只有每次仅传1个参数的date(1)(12)(2020)能走完所有嵌套层返回最终结果,其余多参数传入的调用都会停在中间嵌套层,返回匿名函数。

解决方案

实现支持收集任意数量入参的通用柯里化函数,逻辑为:每次调用时收集所有传入的参数,判断已收集的参数总数是否等于原函数要求的形参数量,数量足够则执行原函数返回结果,不足则返回新函数继续收集后续参数。

正确实现代码如下:

function curry(func) {
  // 接收后续传入的参数,和已收集的参数合并
  return function curried(...args) {
    // 已收集参数数量达到原函数要求的入参数,直接执行
    if (args.length >= func.length) {
      return func.apply(this, args);
    } else {
      // 数量不足,返回新函数继续收集参数
      return function(...nextArgs) {
        return curried.apply(this, args.concat(nextArgs));
      }
    }
  }
}

function format_date(a,b,c){
    return a+"." + b +"."+c;
}

var date= curry(format_date);

// 四种调用均会输出1.12.2020
console.log(date(1)(12)(2020));
console.log(date(1,12)(2020));
console.log(date(1)(12, 2020));
console.log(date(1,12, 2020));

内容的提问来源于stack exchange,提问作者Filip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:15:09