以下问题:
create a sum function, and the requirement:
sum(1,2).result === 3
sum(1,2)(3).result == 6
sum(1,2)(3,4).result == 10
sum(1,2)(3,4)(5).result == 15
这是关于在JS中进行curring的问题。我已经实现了问题的大部分功能。棘手的一点是.result对我来说。
sum(1,2)之后的.result是什么意思?它是属性吗?
如何将.result添加到我的代码中?
function sum(){
var count = 0;
for(let i=0; i<arguments.length; i++){
count += arguments[i];
}
var tmp = function(){
for(let i=0; i<arguments.length; i++){
count += arguments[i];
}
return tmp;
}
tmp.toString = function(){
return count;
}
return tmp;
}
console.log(sum(1,2))
console.log(sum(1,2)(3))
您可以通过将结果存储为函数中的属性来将.result添加到代码中。
您也可以删除冗余的tmp
功能代码。外观如下:
function sum(){
var count = 0; // use previous result
for(let i=0; i<arguments.length; i++){
count += arguments[i];
}
const newSum = sum.bind(this,count);
newSum.result = count;
return newSum;
}
console.log(sum(1,2).result)
console.log(sum(1,2)(3).result)
[.bind()
在这里将克隆的函数(newSum)的第一个参数绑定为count,它将在所有后续调用中使用]