Javascript 为什么我必须立即调用一个立即调用的函数表达式?
如果我有:Javascript 为什么我必须立即调用一个立即调用的函数表达式?,javascript,module,Javascript,Module,如果我有: var calc = function(){ return { adder: function(x,y){return x+y;} } }; calc(); calc.adder(4,5); 计算加法器未定义。但是,如果我立即调用calc作为 var calc = function(){ return { adder: function(x,y){return x+y;} } }(); calc.adder(4,5); 事情按预期进行。为什么第一个
var calc = function(){
return {
adder: function(x,y){return x+y;}
}
};
calc();
calc.adder(4,5);
计算加法器未定义。但是,如果我立即调用calc作为
var calc = function(){
return {
adder: function(x,y){return x+y;}
}
}();
calc.adder(4,5);
事情按预期进行。为什么第一个示例失败?第一个代码集
calc()
是一个返回包含名为adder()
的函数的对象的函数。因此,这将起作用
var calc = function(){
return {
adder: function(x,y){return x+y;}
}
};
var cal = calc();
cal.adder(4,5);
代码行
calc();
将返回的对象存储在无变量中,因此无法使用该对象
第二代码集
您发布的第二个示例本质上是相同的。calc变量不再是一个函数,而是使用
()
执行未命名函数时返回的对象 因为calc()
返回一个新函数,而您没有将该新函数分配给任何对象,因此该函数已丢失,无法用于后续的方法调用。您可以执行calc().adder(…)
。或者你可以做var c=calc();c、 adder(…)
。只是学究一点,如果不立即调用它,那么它就不是“立即调用的函数表达式”。这只是一个函数表达式。有趣的Andrew-因此,如果它是用第一种方法编写的,则必须始终使用calc().adder(4,5)调用它,而使用第二种方法,则可以使用calc.adder(4,5)调用它。所以,另外一个问题,这个问题有点奇怪!您有一个返回对象的函数。如果不调用该函数,则无法取回该对象。