以不同方式传递参数,函数仍应输出相同的值
Passing arguments differently, function should still output the same value
有什么方法可以编写函数,以便在调用它时即使通过不同的参数传递,它仍然输出相同的值
我是 JavaScript 的新手,最近在一次采访中被问到这个问题 -
Write a function sum which when called like sum(2)(3) or sum(2, 3) should return 5.
这可以单独完成,如下所示
function sum(a){
return function(b){
return a+b
}
}
或
function sum(a, b){
return a+b
}
如果我按照第一个代码,它不会执行sum(a, b),当然第二个代码也不支持sum(a)(b)。有什么方法可以合并这两个代码片段,这样无论我怎么称呼它都可以执行吗?
您需要检查传递了多少参数。如果两个都通过了,return 相加的值;否则,return 一个函数,当被调用时,return 是它的参数加上闭包的参数:
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));
function sum(a, b) {
return b !== undefined ? (a + b) : function(b) { return a + b; }
}
console.log(sum(1,2));
console.log(sum(1)(3));
您可以这样做,方法是检查 b
参数。如果是undefined
,那么你return一个函数。如果不是,你 return 数字的总和。
当然你也可以检查两个参数都是数字,但这是一个简单的版本来说明你想要什么。
有什么方法可以编写函数,以便在调用它时即使通过不同的参数传递,它仍然输出相同的值
我是 JavaScript 的新手,最近在一次采访中被问到这个问题 -
Write a function sum which when called like sum(2)(3) or sum(2, 3) should return 5.
这可以单独完成,如下所示
function sum(a){
return function(b){
return a+b
}
}
或
function sum(a, b){
return a+b
}
如果我按照第一个代码,它不会执行sum(a, b),当然第二个代码也不支持sum(a)(b)。有什么方法可以合并这两个代码片段,这样无论我怎么称呼它都可以执行吗?
您需要检查传递了多少参数。如果两个都通过了,return 相加的值;否则,return 一个函数,当被调用时,return 是它的参数加上闭包的参数:
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));
function sum(a, b) {
return b !== undefined ? (a + b) : function(b) { return a + b; }
}
console.log(sum(1,2));
console.log(sum(1)(3));
您可以这样做,方法是检查 b
参数。如果是undefined
,那么你return一个函数。如果不是,你 return 数字的总和。
当然你也可以检查两个参数都是数字,但这是一个简单的版本来说明你想要什么。