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,可以比较容易地得出如下结论
sum()
需要返回一个函数,这个函数需要接受一个参数sum()
需要把传入的参数求和,然后重复1- 函数
==
数字,可以通过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
}
通过撒花
感谢阅读,希望有所帮助。有兴趣可以自己试试。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。