javascript函数中第二组pranthesis调用了什么?

时间:2015-12-26 22:56:23

标签: javascript closures

在这个例子中,第二个pf括号在foo()()中做了什么?

function foo() {
var bar = "bar";

  return function (){
    console.log(bar);
  };

}

function bam() {
  foo()(); // <--------------
}

bam ();

我试图了解关于我遇到这个例子的闭包,其中使用了()()让我困惑!

2 个答案:

答案 0 :(得分:0)

  

第二组括号在foo()()中做了什么?

第一个括号是调用foo函数。第二组括号调用foo返回的匿名函数。

换句话说,第二组括号调用以下匿名函数:

function() {
  console.log(bar);
}

函数foo返回基本上是这样评估的:

function bam() {
  (function() {
    console.log("bar");
  })();
}

答案 1 :(得分:0)

如您所见,函数foo返回一个函数:

function foo() {
    var bar = "bar";
    return function () { // here
        console.log(bar);
    };
}

因此,当您致电foo()时,它会返回一个函数,您可以使用foo()()

调用imediatly