如果我有:
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);
事情按预期工作。为什么第一个例子失败了?
答案 0 :(得分:2)
calc()
是一个返回包含名为adder()
的函数的对象的函数。所以这会奏效。
var calc = function(){
return {
adder: function(x,y){return x+y;}
}
};
var cal = calc();
cal.adder(4,5);
代码行
calc();
将返回的对象存储在无变量中,因此您无法使用该对象。
您发布的第二个示例基本上是相同的。 calc变量不再是函数,它是使用()
执行它时未命名函数返回的对象;