题目描述
该kata的链接: link.
We want to create a function that will add numbers together when called in succession.
add(1)(2);
// returns 3
We also want to be able to continue to add numbers to our chain.
add(1)(2)(3); // 6
add(1)(2)(3)(4); // 10
add(1)(2)(3)(4)(5); // 15
and so on.
A single call should return the number passed in.
add(1); // 1
We should be able to store the returned values and reuse them.
var addTwo = add(2);
addTwo; // 2
addTwo + 5; // 7
addTwo(3); // 5
addTwo(3)(5); // 10
We can assume any number being passed in will be valid whole number.
Example
Test.expect(add(1) == 1);
Test.expect(add(1)(2) == 3);
Test.expect(add(1)(2)(3) == 6);
我完成的代码
function add (num) {// 1
var count = num;
var sum = function(num2){ // 2,3......
count += num2;
return sum
}
sum.valueOf = function(){
return count // return both a function and a value
}
return sum
}
我的思路
原谅我作为一个合格的菜鸟,一开始我看到这个题目的时候是这样的,
思考了一下是这样的,
这是个啥???为啥我题目都不太懂???天啦我怎么这么菜!
但是俗话说得好,不想飞的菜鸟不是好菜鸟,于是我打开了百度…
原来这是链式函数(一个函数可以无限次调用,需要 return 同一个 function),链式函数我会研究一下然后另外做个笔记。
题目的意思是将每一次的传参求和,add()函数要返回一个函数sum(),并且sum()内部也需要返回它本身,这样才能完成连续传参求和的操作。
那么问题来了,我函数返回的是函数,我怎么得出最后的和呢,当然作为一个合格的菜鸟,这个问题我也不会,于是我又打开了百度…
原来可以重写函数的toString()方法和valueOf()方法来实现,
修改其toString和valueof方法,目的是为了在进行类型转化时返回值。
它可以在返回函数的同时返回它的值
sum.valueOf = function(){
return count // return both a function and a value
}
我的难点
知识点的不足!!!
勤能补拙!!!