所以我正在处理一个编码kata,它要求我编写一个函数:接受任意数量的参数并返回给定的每个参数的乘积。
kata回答说你可以这样打电话:
MultiplyNums(1, 3)(2)
我这样写了我的(当然这对上面的情况不起作用):
function MultiplyNums() {
var prod = 0;
for (var i = 0; i < arguments.length; i++) {
prod = prod * arguments[i];
}
return prod;
}
如何编写函数以实现它,以及调用此概念的内容(如果它有名称)?它“看起来”像立即函数调用,即使我知道它指的是其他东西。
另外,如果我想进行两种类型的调用,该怎么办:
MultiplyNums(1, 3)(2) //one type of call
MultiplyNums(1, 5) //another type of call
答案 0 :(得分:2)
这个概念被称为currying,你几乎拥有它!
prod
应该初始化为1
,这样您就不会乘以0
,而应该返回一个函数。
function MultiplyNums() {
var prod = 1;
for (var i = 0; i < arguments.length; i++)
prod *= arguments[i];
return function(num) {
return prod * num;
};
}
console.log(MultiplyNums(3, 1)(2));