如何编写这个JavaScript函数,以便多次调用它,这个概念叫什么?

时间:2016-05-28 04:09:38

标签: javascript

所以我正在处理一个编码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

1 个答案:

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