专栏首页BFE.dev前端刷题日记BFE.dev前端刷题 23. 实现一个sum()方法
原创

BFE.dev前端刷题 23. 实现一个sum()方法

bfe.dev 是一个针对前端的刷题网站,像是前端的LeetCode。该系列文章是我在上面的刷题日记。

题目23

BFE.dev#23 实现一个sum()方法

问题

实现一个sum(),使得如下判断成立。

const sum1 = sum(1)
sum1(2) == 3 // true
sum1(3) == 4 // true
sum(1)(2)(3) == 6 // true
sum(5)(-1)(2) == 6 

分析

从上面的sample,可以比较容易地得出如下结论

  1. sum() 需要返回一个函数,这个函数需要接受一个参数
  2. sum() 需要把传入的参数求和,然后重复1
  3. 函数 == 数字,可以通过type coercion实现,只需要添加valueOf 或者 toString即可

开始代码

首先完成function的部分。上述的1和2告诉我们需要用一个变量来存储当前的和,这个“和”需要可以在返回的function中可以使用。为了简单,可以直接当作第二个参数即可。

function sum(num, currentSum = 0) {
  const newCurrentSum = num + currentSum
  
  const func = function(arg) {
    return sum(arg, num + currentSum)
  }

  return func
}

最后我们处理valueOf

function sum(num, currentSum = 0) {
  const newCurrentSum = num + currentSum
  
  const func = function(arg) {
    return sum(arg, num + currentSum)
  }
  
  func.valueOf = () => newCurrentSum
  // below also works
  // func.toString = () => newCurrentSum.toString()
  
  return func
}

通过撒花

感谢阅读,希望有所帮助。有兴趣可以自己试试

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • BFE.dev前端刷题1 - 实现curry()

    也就是说 curry() 需要返回一个function,这个function接受任意数量的参数,并且

    JSer
  • BFE.dev前端刷题11 - 什么是composition?实现一个pipe()方法

    在计算结果的时候,funcs中的function都需要被调用并且修改同一个变量,我们声明一个result,然后一个for loop就可以搞定。

    JSer
  • BFE.dev前端刷题#13. 利用栈(Stack)创建队列(Queue)

    要从Stack中dequeue一个元素的的话,因为Stack只能pop,所以需要pop掉除了最后一个元素的所有元素。那我们在不断pop的时候,pop掉的元素放哪...

    JSer
  • rxgo笔记

    超级大猪
  • 模板方法模式

    在微软的WebCast上, 李建中老师有个设计模式的系列讲座,其中在讲到模板方法(Template Method)曾说:如果你只想学习一种设计模式就学习模板方法...

    用户2192970
  • 谁是大侦探?Hololens助力警方侦破各种案件

    VRPinea
  • 【拓展】未来的JavaScript记录与元组

    编者按:本文译者李松峰,资深技术图书译者,翻译出版过40余部技术及交互设计专著,现任360奇舞团Web前端开发资深专家,360前端技术委员会委员、W3C AC代...

    pingan8787
  • 业界 | 特斯拉正式发布Autopilot 2.0自动驾驶系统:今天你升级了吗?

    选自Electrek 作者:Fred Lambert 机器之心编译 参与:李泽南 自动驾驶对于我们来说还是一个全新的,有待验证的事物。不过,目前已经在市面上售...

    机器之心
  • 读完《云原生架构白皮书》,我们来谈谈开放应用模型(OAM)

    7月21日阿里云发布了《云原生架构白皮书》,该书由阿里云众多技术专家共同编撰而成,从云原生定义、技术、架构、产品、实践和发展趋势几个方面详细介绍了云原生这一近些...

    郭旭东
  • 半自动驾驶大对决:特斯拉和凯迪拉克谁是真王

    原作:Alex Roy@The Drive 夏乙 问耕 编译整理 量子位 出品 | 公众号 QbitAI ? 自动驾驶是新的竞技场。 尽管完全自动驾驶技术(L...

    量子位

扫码关注云+社区

领取腾讯云代金券