由于return语句,不应该在控制台中打印吗?因为最后的()所以会立即调用代码,所以为什么不打印?
var Module = (function () {
var privateMethod = function () {
// private
};
var someMethod = function () {
// public
console.log('hello');
};
var anotherMethod = function () {
// public
};
return {
someMethod: someMethod,
anotherMethod: anotherMethod
};
})();
答案 0 :(得分:1)
return {
someMethod: someMethod, // just a function reference
anotherMethod: anotherMethod // again a function reference
};
所以,你不调用该函数。 您只是返回附加到对象属性的函数引用。尝试在此处使用逗号运算符,它在执行someMethod()
函数时计算到最右边的语句。
return {
someMethod: someMethod(), someMethod, // first getting called and someMethod ref is passed to the property
anotherMethod: anotherMethod
};
答案 1 :(得分:0)
这是因为var
前面的Module
关键字。
如果您在控制台中执行以下操作:
var a = 5
// a设置为5
但未定义在控制台中显示。
如果您要取消var
关键字:
a = 5
// a再次设置为5
,但控制台中显示了5。
但是在您的真实代码中,您可能希望使用var关键字。
所以简单地说它只是控制台的输出方式,idk为什么。
答案 2 :(得分:0)
启发更多,
function
本身是Function
的对象(请参阅https://msdn.microsoft.com/en-us/library/ie/x844tc74%28v=vs.94%29.aspx)
所以基本上你要添加一个对Function类型的对象的引用,它不是IIFE。