javascript - 以不同方式传递参数,函数仍应输出相同的值
问题描述
有什么方法可以编写函数,以便当我调用它时,即使通过不同的参数传递,它仍然输出相同的值
我是 JavaScript 新手,最近在一次采访中被问到这个问题 -
编写一个函数 sum,当调用 sum(2)(3) 或 sum(2, 3) 时应该返回 5。
这可以单独完成如下
function sum(a){
return function(b){
return a+b
}
}
或者
function sum(a, b){
return a+b
}
如果我遵循第一个代码,它将不会执行 sum(a, b),当然第二个代码将不支持 sum(a)(b)。有什么方法可以合并这两个代码片段,以便它执行不管我怎么称呼它?
解决方案
您需要检查传递了多少参数。如果通过了两个,则返回相加的值;否则,返回一个函数,该函数在调用时返回其参数加上闭包的参数:
const sum = (...args) => {
if (args.length === 2) {
return args[0] + args[1];
}
return arg => arg + args[0];
};
console.log(sum(2)(3));
console.log(sum(2, 3));
更一般地,您可以创建一个makeSum
函数来处理要接受的参数总数是任意数字时:
const makeSum = totalArgCount => {
const fn = (...args) => {
if (args.length === totalArgCount) {
return args.reduce((a, b) => a + b, 0);
}
return fn.bind(undefined, ...args);
};
return fn;
};
const sum2 = makeSum(2);
console.log(sum2(2)(3));
console.log(sum2(2, 3));
const sum4 = makeSum(4);
console.log(sum4(2)(3)(4)(5));
console.log(sum4(2, 3, 4)(5));
推荐阅读
- c# - 从双重投射元组的单个元素?加倍
- php - 如果 column1 值选择为“male”,则在 column2 中插入值“man”
- android - How to kill this app in android or restart
- android - 尝试在 Kotlin Android 应用程序中测试 ViewModel 注入时出现 Koin NullPointerException
- python - 带有碰撞边界的可移动按钮
- php - PHP SQL Server 不产生错误或工作
- python - 检查子进程是否正在执行
- php - 如何一步上传图片和文字?
- javascript - Change word inside link using javascript
- r - 建筑招生 - 交叉记录比较 - data.table