为什么我必须立即调用一个立即调用的函数表达式?

时间:2016-08-27 00:06:43

标签: javascript module

如果我有:

var calc = function(){
  return {
    adder: function(x,y){return x+y;}
  }
};
calc();
calc.adder(4,5);

calc.adder未定义。但是,如果我立即调用calc作为

var calc = function(){
  return {
    adder: function(x,y){return x+y;}
  }
}();
calc.adder(4,5);

事情按预期工作。为什么第一个例子失败了?

1 个答案:

答案 0 :(得分:2)

第一个代码集

calc()是一个返回包含名为adder()的函数的对象的函数。所以这会奏效。

var calc = function(){
    return {
        adder: function(x,y){return x+y;}
    }
};

var cal = calc();
cal.adder(4,5);

代码行

calc();

将返回的对象存储在无变量中,因此您无法使用该对象。

第二代码集

您发布的第二个示例基本上是相同的。 calc变量不再是函数,它是使用()执行它时未命名函数返回的对象;