Javascript 以不同的方式传递参数,函数仍应输出相同的值

Javascript 以不同的方式传递参数,函数仍应输出相同的值,javascript,closures,currying,Javascript,Closures,Currying,是否有任何方法可以编写函数,以便即使通过不同的参数传递调用它,它仍然输出相同的值 我是JavaScript新手,最近在一次采访中被问到这个问题- 写一个函数sum,当它像sum(2)(3)或sum(2,3)一样被调用时,应该返回5 这可以按如下方式单独完成 function sum(a){ return function(b){ return a+b } } 或 如果我遵循第一个代码,它将不会执行sum(a,b),当然第二个代码将不支持sum(a)(b)。是否有任何方法可以合并

是否有任何方法可以编写函数,以便即使通过不同的参数传递调用它,它仍然输出相同的值

我是JavaScript新手,最近在一次采访中被问到这个问题-

写一个函数sum,当它像sum(2)(3)或sum(2,3)一样被调用时,应该返回5

这可以按如下方式单独完成

function sum(a){
  return function(b){
    return a+b
  }
}


如果我遵循第一个代码,它将不会执行sum(a,b),当然第二个代码将不支持sum(a)(b)。是否有任何方法可以合并这两个代码段,使其执行时与我如何调用它无关?

您需要检查传递了多少个参数。如果传递了两个,则返回添加的值;否则,返回一个函数,该函数在调用时返回其参数加上闭包的参数:

const sum=(…args)=>{
如果(args.length==2){
返回参数[0]+args[1];
}
返回arg=>arg+args[0];
};
控制台日志(总和(2)(3));
控制台日志(总和(2,3))
函数和(a,b){
返回b!==未定义?(a+b):函数(b){返回a+b;}
}
控制台日志(总和(1,2));

控制台日志(总和(1)(3))测试您收到的参数数/是否
b
未定义
并返回总和或函数…?
function sum(a, b){
  return a+b
}