js柯里化的问题

发布于 2022-09-03 08:58:30 字数 223 浏览 16 评论 0

我们都知道js柯里化如何实现,但是最终实现的效果一般是酱紫的:

sum(1)(2)(3)(4)()

但是后面多了一个()总是很不爽,也有不带()的实现,不过参数个数是确定的,所以,我想问:

console.log(sum(1)(2)(3))

这种直接输出6的怎么实现?注意参数可能更多也可能更少0.0

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

梦情居士 2022-09-10 08:58:30

你想sum(1)(2)(3)直接返回6,这不难实现。
然后你又想sum(1)(2)(3)(4)返回的是10,那就不行了。
因为你前面三次调用已经返回6了,然后你的代码就是6(4)了,这显然不行。


所以必须有个地方做区分,要不就像第一种一样以不传参的方式取得结果,要不就只能固定次数了。

饮湿 2022-09-10 08:58:30

好人说得对,有一些实现,通过修改toString或者valueOf方法使结果返回数字的,其实返回的还是一个function。

下雨或天晴 2022-09-10 08:58:30
function sum(x, y) {
  if (typeof y !== 'undefined') {
    return sum.apply(null, [x + y].concat([].slice.call(arguments, 2)));
  } else {
    var fn = function() {
      return sum.apply(null, [x].concat([].slice.call(arguments)));
    };
    fn.toString = function() {
      return x;
    };
    return fn;
  }
}

sum(1, 2, 3, 4, 5)
sum(1)(2)(3)(4)(5)
sum(1, 2)(3)(4, 5)
sum(1,2)(3, 4, 5)
sum(1, 2, 3, 4)(5)

输出结果都是15

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文