ES5 模块模式使用

ES5 Module pattern usage

你能给我解释一下这两种方法有什么区别吗(FirstModule 和 SecondModule:

var MyModule = (function () {
    return {
        method: function () {
            console.log("MyModule:method");
        }
    }
})();

var FirstModule = (function () {
    return {
        test: function () {
            MyModule.method();
        }
    }
})();

var SecondModule = (function (myMethod) {
    return {
        test: function () {
            myMethod.method(); 
        }
    }
})(MyModule);

在这两种情况下我们都有相同的对象,它不是副本。我将不胜感激任何好的信息、任何方法的优点和缺点。

第一种方法使用 MyModule 变量,在分配 FirstModule 值后,它可以被模块外的其他代码覆盖。

第二个使用 myMethod 变量,它不能(尽管分配给 myMethod 的对象的 properties 仍然可以,因为该对象仍然通过 MyModule 变量全局可用。