Javascript 函数()don';我不明白额外的括号。它是如何执行的?

Javascript 函数()don';我不明白额外的括号。它是如何执行的?,javascript,function,closures,Javascript,Function,Closures,有点困惑这到底是怎么回事?该函数如何知道下一个括号是内部返回函数的参数 function times(x){ return function(y){ return function(z){ return x*y*z; } }; } 当您编写times(2)(5)(2)时,您基本上是在执行((times(2))(5))(2),这意味着将对times(2)进行求值,这将返回一个函数,然后将使用(5)对该函

有点困惑这到底是怎么回事?该函数如何知道下一个括号是内部返回函数的参数

    function times(x){
      return function(y){
        return function(z){
          return  x*y*z;
        }
      };
    }
当您编写
times(2)(5)(2)
时,您基本上是在执行
((times(2))(5))(2)
,这意味着将对
times(2)
进行求值,这将返回一个函数,然后将使用
(5)
对该函数进行求值,依此类推

更好的例子是:

console.log(times(2)(5)(2))  // 20
这:

执行函数
。但看看该函数返回的结果:

times(2)
它返回一个函数。因此,作为
乘以(2)
的返回值的函数本身可以执行:

function times(x){
  return function(y){
    //...
  }
}
times(2)(5)
该函数还返回一个函数,该函数本身也会执行:

function times(x){
  return function(y){
    //...
  }
}
times(2)(5)
基本上,在JavaScript中,函数与其他任何函数一样是一个对象。它可以作为参数传递、返回、设置为变量或直接内联执行,而无需命名或引用

因此:

times(2)(5)(2)
大致相当于:

times(2)(5)

但是不需要变量来存储初始返回值,它只会在返回时在线执行。

这意味着第一个函数返回另一个函数,而另一个函数又返回另一个函数

这与依次调用所有三个函数相同

var func = times(2);
func(5);
一个接一个:

var func1 = times(2);
var func2 = func1(3);
var func3 = func2(4);
进度现在是指向first的指针,正如times返回的first一样。X绑定到它(看看闭包…)

进度现在是第二个,因为第二个由第一个返回

progress=progress(2);
这个概念被称为

所以它的作用是:

progress=progress(3);//1*2*3

从函数中返回函数的概念不是currying,即闭包的概念。是的,您可以用这种方式进行curry,但是true curry检查传递的参数数量并确定要返回的函数(如果有)。在这个例子中,如果你说了
次(2,5,5)
为什么f this被否决了,那么如果重复标记是基于我在这里提到的内容,那么True currying将返回一个产品。我没有否决这个,但看起来好像有人经过并否决了所有答案。你是对的,标记为重复的问题是关于咖喱的,但是,正如我在评论中提到的,它被错误地标记了。然而,他们可能会投反对票,因为回答重复的问题是不受欢迎的。@mhodges我很抱歉,如果我听起来像是在指责,我不是想问你“为什么投反对票”,一般来说,我是问为什么的。我明白你的意思,为什么这不完全是咖喱,但可以被称为咖喱的一部分——所有的狗都是动物,但不是所有的动物都是狗
var result1 = times(2); //==> returns a function
var result2 = result1(5); //==> returns a function
var result3 = result2(5); //==> returns a product