如何在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适合你的需要把答案标记为正确总是好的。如果解决方案适合你的需要