函数()() 不理解额外的括号。它是如何执行的?


    function times(x){
      return function(y){
        return function(z){
          return  x*y*z;
        }
      };
    }

有些困惑,这是如何工作的?该函数如何知道下一个括号是内部返回函数的参数?

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

this:

times(2)

执行函数times。但是查看该功能返回的内容:

function times(x){
  return function(y){
    //...
  }
}

它返回功能。因此可以执行函数作为times(2)的返回值:

times(2)(5)

该函数返回一个函数,该功能本身也将执行:

times(2)(5)(2)

基本上,在JavaScript中,函数是一个与其他对象一样。它可以作为参数传递,返回,设置为变量,或者只是内联执行,而无需命名或以其他方式引用。

所以:

times(2)(5)

IS 大致相当于:

var func = times(2);
func(5);

但无需一个变量存储该初始返回值,它只是在返回时在线执行。

编写times(2)(5)(2)时,您基本上是在执行((times(2))(5))(2),这意味着将评估times(2),它将返回一个函数,然后将使用(5)等评估该函数。

一个更好的例子:

function a(){
    return {b: 'c'}
}
a().b //c

它意味着第一个功能返回另一个函数,又返回另一个函数。

它与一个接一个地调用所有三个函数相同。

var func1 = times(2);
var func2 = func1(3);
var func3 = func2(4);

一个接一个:

function times(x){
  return function first(y){
    return function second(z){
      return  x*y*z;
    }
  };
}
var progress=times(1);

进度现在是第一个指针,因为第一次是由时代返回的。X与之绑定(请查看关闭...(

progress=progress(2);

进度现在是第二名,因为第二次返回。

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

该概念称为咖喱。

那么,它的作用是:

var result1 = times(2); //==> returns a function
var result2 = result1(5); //==> returns a function
var result3 = result2(5); //==> returns a product