解释JavaScript模块

解释JavaScript模块,javascript,Javascript,这种方式的区别是什么: var MyNamespace = window.MyNamespace || {}; MyNamespace.Helper = function() { var _getValue = function() { var value = 5; return value; }; return { getValue: _getValue }; }(); va

这种方式的区别是什么:

var MyNamespace = window.MyNamespace || {};

MyNamespace.Helper = function()
{
     var _getValue = function()
     {
         var value = 5;

         return value;
     };


    return 
    {
         getValue: _getValue
    };
}();
var MyNamespace = window.MyNamespace || {};

MyNamespace.Helper = function()
{
    function _getValue()
    {
       var value = 5;

       return value;
    };

    var publicMethod = 
    {
        getValue: function() { _getValue(); }
    };

    return publicMethod;    
};
这样:

var MyNamespace = window.MyNamespace || {};

MyNamespace.Helper = function()
{
     var _getValue = function()
     {
         var value = 5;

         return value;
     };


    return 
    {
         getValue: _getValue
    };
}();
var MyNamespace = window.MyNamespace || {};

MyNamespace.Helper = function()
{
    function _getValue()
    {
       var value = 5;

       return value;
    };

    var publicMethod = 
    {
        getValue: function() { _getValue(); }
    };

    return publicMethod;    
};

有两个非常显著的区别:

  • 第一个版本不返回对象,因此
    MyNamespace.Helper
    将是
    undefined
    。尝试对其使用
    getValue
    将失败。这要感谢自动插入分号并添加
    返回后
    。不要将换行符放在
    return
    及其返回的内容之后

  • 假设您解决了这个问题,那么在第一个调用
    MyNamespace.Helper.getValue
    将得到值
    5
    ,而在第二个调用它将得到
    未定义的
    ,因为您的匿名包装器
    \u getValue
    不会返回任何内容


  • 有两个非常显著的区别:

  • 第一个版本不返回对象,因此
    MyNamespace.Helper
    将是
    undefined
    。尝试对其使用
    getValue
    将失败。这要感谢自动插入分号并添加
    返回后
    。不要将换行符放在
    return
    及其返回的内容之后

  • 假设您解决了这个问题,那么在第一个调用
    MyNamespace.Helper.getValue
    将得到值
    5
    ,而在第二个调用它将得到
    未定义的
    ,因为您的匿名包装器
    \u getValue
    不会返回任何内容


  • 第二个
    getValue
    不会返回任何内容。在JavaScript中使用模块模式正确吗?我想第二个版本是完全错误的..第二个部分可以被实例化如下:MyNamespace.SomethingElse=newmynamespace.Helper();如果是,有什么好处呢?第二个
    getValue
    不会返回任何内容。这是在JavaScript中使用模块模式的正确方法吗?我想第二个版本是完全错误的..第二个部分可以被实例化如下:MyNamespace.SomethingElse=newmynamespace.Helper();如果是,会有什么好处?