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
}

通过撒花

Alt Text

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


JSer
12 声望3 粉丝

[链接]