为什么公共方法不能在IIFE中打印?

时间:2015-03-10 05:35:07

标签: javascript iife

由于return语句,不应该在控制台中打印吗?因为最后的()所以会立即调用代码,所以为什么不打印?

var Module = (function () {

var privateMethod = function () {
// private
 };

  var someMethod = function () {
    // public
    console.log('hello');
  };

  var anotherMethod = function () {
    // public
  };

  return {
    someMethod: someMethod,
    anotherMethod: anotherMethod
  };

})();

3 个答案:

答案 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。