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

使用bind实现curry函数时参数无法正确注入,调用提示非函数错误

问题原因

你实现的curryByBind仅做了单次参数绑定,没有对绑定后生成的新函数继续做柯里化处理,完整执行逻辑如下:

  • 初始调用curryByBind(sum)时,sum.length为2,返回函数(arg) => sum.bind(null, arg)
  • 执行sumMany(1)时,传入参数1得到绑定了第一个参数的sum函数,该函数剩余待接收参数为1个
  • 执行sumMany(1)(2)时,会直接调用绑定了第一个参数的sum函数,传入2后直接返回运算结果3,而非返回新的函数
  • 此时你尝试对数字3执行()调用,自然抛出sumMany(...)(...) is not a function的错误
修复方案

需要对每次参数绑定后生成的新函数,递归传入curryByBind做持续柯里化处理,修改后代码如下:

const curryByBind = (fn) => {
  // 待接收参数长度为0时执行原函数返回结果
  if (fn.length === 0) return fn()
  // 接收单个参数绑定后,将新生成的函数继续做柯里化处理
  return (arg) => curryByBind(fn.bind(null, arg))
}

const sum = (x, y) => x + y
const sumMany = curryByBind(sum)

console.log(sumMany(1)(2)()) // 正常输出 3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:57:04