具有两个括号和两个参数的JS函数

rea*_*lph 9 javascript

我试图理解一个函数如何工作,运行两个括号和两个参数.像这样:

add(10)(10); // returns 20
Run Code Online (Sandbox Code Playgroud)

我知道怎么写一个像这样的两个参数:

function add(a, b) {
  return a + b;
}

add(10,10); // returns 20
Run Code Online (Sandbox Code Playgroud)

我怎么能改变这个功能,以便它可以用一组参数或两个参数运行,并产生相同的结果?

任何帮助表示赞赏.直截了当地抓住了我的头.

提前致谢!

T.J*_*der 18

我怎么能改变这个功能,以便它可以用一组参数或两个参数运行,并产生相同的结果?

几乎可以这样做,但我很难想到一个很好的理由.

方法如下:你检测你的函数接收了多少个参数,如果它只收到一个,你返回一个函数而不是一个数字 - 并且如果它被调用,则将该函数添加到第二个数字中:

function add(a,b) {
  if (arguments.length === 1) {
    return function(b2) { // You could call this arg `b` as well if you like,
      return a + b2;      // it would shadow (hide, supercede) the one above
    };
  }
  return a + b;
}
console.log(add(10, 10)); // 20
console.log(add(10)(10)); // 20
Run Code Online (Sandbox Code Playgroud)

我之前说" 差不多 "因为add函数只收到一个参数,这并不能保证调用者会调用结果.他们可以写:

var x = add(10);
Run Code Online (Sandbox Code Playgroud)

......永远不要调用x现在引用的函数.


Ben*_*aum 9

欢迎来到一流功能的精彩世界

在JavaScript中,函数可以返回函数,因为函数只是另一个对象.一个简单的实现是这样的:

function add(x){
    return function addOther(y){
        return x + y;
    };
}
Run Code Online (Sandbox Code Playgroud)

由于闭包和一阶函数,这是可能的.

这也让你做部分应用,像Ramda这样的库在很大程度上利用了它.

var addThree = add(3)
addThree(5); // 8
Run Code Online (Sandbox Code Playgroud)