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

JS柯里化与偏应用示例中为什么words和words2函数运行结果完全相同?

执行逻辑拆解

我们一步步拆分运行流程就能清楚两者等价的原因:

1. curry 函数的基础逻辑

你写的curry函数核心作用是:

  • 首先拿到待柯里化函数的形参个数arity,这里传入的原始split函数有2个形参sep和str,所以arity = 2
  • 返回的$curry函数会判断传入的实参个数:
    • 实参个数 < 形参总数:返回一个预置了当前传入参数的新$curry函数,后续调用新函数时传的参数会和预置参数自动拼接
    • 实参个数 >= 形参总数:直接调用原始函数,传入所有拼接好的参数

2. words 变量的生成和调用流程

  • 执行split(' ')时,$curry收到的实参个数是1,小于2,所以返回$curry.bind(null, ' '),这个绑定后的新函数就是words,它已经记住了第一个参数固定是空格' '
  • 调用words('something cool')时,新传入的字符串和之前预置的空格拼接成总长度为2的参数数组,刚好满足形参数量要求,直接调用原始split函数执行'something cool'.split(' ')得到结果

3. 为什么和words2效果一致

words2的逻辑是接收字符串参数后,直接给split传满2个参数:空格和当前字符串,这时候$curry判断参数数量满足要求,直接调用原始split函数执行逻辑,和words最终传给原始函数的参数完全一致,所以输出结果相同。
简单来说,words就是words2的偏应用简化写法,省略了手动声明参数再透传的步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:09:04