Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果其中一个参数包含多个值,如何使用currying函数?_Javascript - Fatal编程技术网

Javascript 如果其中一个参数包含多个值,如何使用currying函数?

Javascript 如果其中一个参数包含多个值,如何使用currying函数?,javascript,Javascript,我有一个高阶函数,虽然第一种情况下乘法(4,5)的效果与预期一样,但是否可以传递多个参数,如乘法(2)(4,5)。在这种情况下,答案是8,但是可以这样创建一个curried函数,从而得到40作为结果吗 函数乘法{ 返回函数(b){ 返回s*b; } } 控制台日志(乘(4)(5)) log(multiply(2)(4,5))您可以使用并收集两个函数上的所有参数,并返回缩减后的结果 函数乘法(…a){ 返回函数(…b){ 返回[…a,…b].reduce((a,b)=>a*b); }; } c

我有一个高阶函数,虽然第一种情况下
乘法(4,5)
的效果与预期一样,但是否可以传递多个参数,如
乘法(2)(4,5)
。在这种情况下,答案是8,但是可以这样创建一个curried函数,从而得到40作为结果吗

函数乘法{
返回函数(b){
返回s*b;
}
}
控制台日志(乘(4)(5))
log(multiply(2)(4,5))
您可以使用并收集两个函数上的所有参数,并返回缩减后的结果

函数乘法(…a){
返回函数(…b){
返回[…a,…b].reduce((a,b)=>a*b);
};
}
console.log(乘(4)(5));//20
console.log(乘(2)(4,5));//40

console.log(乘(3,2)(4,5));//120
如果您有一个或多个
b
参数,可以这样做:

函数乘法{
//将包含所有b参数的乘法
var结果=1;
//…b将返回传递的数组参数
返回函数(…b){
//循环遍历每个数组并更新结果
对于(变量i=0;ilog(乘法(2)(4,5))
您可以使用
参数执行类似操作:

function multiply(s) {
  return function () {
    return Array.from(arguments).reduce(function(accumulator, currentValue) {
      return accumulator * currentValue;
    }, s);
  }
}
函数乘法{
返回函数(b){
for(输入参数)s*=参数[key];
返回s;
}
}
控制台日志(乘(4)(5))

log(multiply(2)(4,5))
您可以使用两个嵌套的
multiply
调用或重写函数。另外,您的第一个案例是
multiply(4)(5)
,而不是
multiply(4,5)
类似于?@NickParsonsgreat@GerardoFurtado thanks@brk不用担心,检查Nina的答案,以获得在第一个和第二个函数中传递参数的选项。为什么最好?另外,你能给你的代码添加一些解释吗?