实现一个无限累加计算参数值的函数

看见了一个面试题,用 JS 实现一个无限累加的函数 add,示例如下:

sum(1).valueOf(); // 1
sum(1)(2).valueOf();  // 3
sum(1)(2)(3).valueOf(); // 6
sum(1)(2)(3)(4).valueOf(); // 10 

// 以此类推

具体的代码实现

function sum (...args) {
  const f = (...rest) => sum(...args, ...rest)
  f.valueOf = () => args.reduce((x, y) => x + y, 0)
  return f
}

sum(1).valueOf(); // 1
sum(1)(2).valueOf();  // 3
sum(1)(2)(3).valueOf(); // 6
sum(1)(2)(3)(4).valueOf(); // 10 

这是函数柯里化的应用,是一个比较高级的概念,目前我还只是认识的阶段,相信随着经验的累计会更深入的了解吧

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,429评论 0 2
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,967评论 0 38
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,670评论 0 17
  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 4,679评论 0 5
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,161评论 1 32