gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:40:14 25 4
gpt4 key购买 nike

有什么方法可以编写函数,以便即使通过不同地传递参数来调用它,它仍然输出相同的值

我是 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)。有什么方法可以合并这两个代码片段,以便无论我如何称呼它都可以执行?

最佳答案

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

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));

关于javascript - 以不同方式传递参数,函数仍应输出相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59963868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com