分配到出口与模块有什么区别?

时间:2016-08-11 22:09:43

标签: javascript design-patterns module

考虑以下代码,基于"松散增强" http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html

中描述的模块模式
var FOO = (function(exports) {

  //What is the difference between this:
  exports.hello = "hello";
  return exports;

}(FOO || {}));

var FOO = (function(exports) {

  //And this:
  FOO.world = "world";
  return exports;

}(FOO || {}));

//When the result works either way:
alert(FOO.hello + " " + FOO.world);

在这个示例中,为什么当它以相同的方式工作时,会分配给exportsFOO?有什么区别?

1 个答案:

答案 0 :(得分:2)

这两个版本不相同。当您尝试分配FOO.world时,第二个会出错,因为此时FOO仍未定义。现在你的代码只能工作,因为第一个模块定义是创建FOO对象。

至于为什么exports变量的主要原因是它将模块定义与模块名称分离。您只需要编写一次模块名称(FOO),如果您在服务器端环境中,甚至可能不需要使用模块名称(它隐含在文件名中)。

注意你在游戏中的链接,甚至简单的"模块导出"版本已使用" my"模块的变量,而不是直接分配给MODULE:

var MODULE = (function () {
    var my = {},
        privateVariable = 1;

    function privateMethod() {
        // ...
    }

    my.moduleProperty = 1;
    my.moduleMethod = function () {
        // ...
    };

    return my;
}());