如何在javascript中实现咖喱?
问题如下:如何在javascript中实现咖喱?,javascript,currying,first-class-functions,Javascript,Currying,First Class Functions,问题如下: 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中使用咖喱的问题。我已经实现了问题的大部分功能。棘手的一点是。结果对我来说 求和(1,2)后的结果是什么意思?这是一种属性吗 如何将.result添加到我的代码中 函数和
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中使用咖喱的问题。我已经实现了问题的大部分功能。棘手的一点是。结果对我来说
求和(1,2)后的结果是什么意思?这是一种属性吗
如何将.result添加到我的代码中
函数和(){
var计数=0;
对于(设i=0;i),可以通过将结果存储为函数中的属性,将.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)
函数和(){
var count=0;//使用以前的结果
对于(设i=0;i),可以通过将结果存储为函数中的属性,将.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)
函数和(){
var count=0;//使用以前的结果
对于(设i=0;iShrey的答案是完美的,但我们可以使它更清晰
函数和(){
让结果=[…参数].reduce((acc,num)=>acc+num,0);
让newSum=sum.bind(这个,结果);
newSum.result=结果;
返回新闻组;
}
控制台日志(总和(3,4)(5)(9)。结果);
console.log(sum(3,4)(5,6)(9).result);
Shrey的答案很完美,但我们可以让它更清晰
函数和(){
让结果=[…参数].reduce((acc,num)=>acc+num,0);
让newSum=sum.bind(这个,结果);
newSum.result=结果;
返回新闻组;
}
控制台日志(总和(3,4)(5)(9)。结果);
console.log(sum(3,4)(5,6)(9.result);
curry是一种处理函数的高级技术。它不仅用于JavaScript,也用于其他语言
Currying是一种函数转换,它将函数从可调用为f(a,b,c)
转换为可调用为f(a)(b)(c)。
Currying不调用函数,它只是转换函数
让我们先看一个例子,以便更好地理解我们正在讨论的内容,然后是实际应用
我们将创建一个辅助函数curry(f)
,该函数对两个参数f
执行curry操作。换句话说,curry(f)
对两个参数f(a,b)
将其转换为作为f(a)(b)
运行的函数:
有关更多详细信息,请参见。Curry是一种处理函数的高级技术。它不仅用于JavaScript,也用于其他语言
Currying是一种函数转换,它将函数从可调用为f(a,b,c)
转换为可调用为f(a)(b)(c)。
Currying不调用函数,它只是转换函数
让我们先看一个例子,以便更好地理解我们正在讨论的内容,然后是实际应用
我们将创建一个辅助函数curry(f)
,该函数对两个参数f
执行curry操作。换句话说,curry(f)
对两个参数f(a,b)
将其转换为作为f(a)(b)
运行的函数:
另请参阅此处的解决方案以了解更多详细信息。最好在参数上使用扩展运算符,而不是使用参数
关键字。应避免使用此选项
函数和(…参数){
让计数=0;
计数+=参数减少((a,v)=>a+v);
设res=sum.bind(这个,count);
结果=计数;
返回res;
}
console.log(sum(1,5)(4)(5).result)
这里有一个解决方案。最好在参数上使用扩展运算符,而不是使用参数
关键字。应避免使用此选项
函数和(…参数){
让计数=0;
计数+=参数减少((a,v)=>a+v);
设res=sum.bind(这个,count);
结果=计数;
返回res;
}
控制台日志(总和(1,5)(4)(5)。结果)
Yes,result
将是一个属性。JS中的函数仍然是对象,因此它们可以附加属性甚至方法。Yes,result
将是属性。JS中的函数仍然是对象,因此它们可以附加属性甚至方法。将answer标记为正确总是好的。如果ion适合你的需要把答案标记为正确总是好的。如果解决方案适合你的需要