我正在尝试在javascript中使用模块模式。
到目前为止,我有一个文件
global.js 它声明了我的全局对象 我在一个模块容器中添加了一些其他内容,这些内容应该在我想要构建的所有模块的全局var MYAPP中可用。
var MYAPP = MYAPP || {};
MYAPP.modules = {};
MYAPP.segments = {
seg1: "seg1",
seg2: "seg2"
};
MYAPP.property = 1;
在另一个文件中,我想使用立即函数并将我的全局变量传递给它。
MYAPP.modules.m1 = (function (app, global) {
// Dependencies
var segs = app.segments;
}(MYAPP, this));
之后我连接文件,但是globals.js文件不是第一个,所以MYAPP声明是在MYAPP.modules.m1声明之后。
所以当我运行代码时,我得到了这个:
Uncaught TypeError: Cannot read property 'modules' of undefined(anonymous function) @ module.js:1
我认为所有的var声明都是在javascript开头移动的。为什么MYAPP未定义呢? 是因为甚至在解析代码之后才调用立即函数? 如果是这样,我怎么能让我的module.js可以访问它?
我试着按照这里描述的一些内容: http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html
编辑: 好吧我不知道var只是创建并设置为undefined。 我不明白这个概念。谢谢你的提示!
但我的问题仍然存在。如何让我的模块工作。在模块声明之前放置我的MYAPP声明? 还是有另一种解决方案吗?
编辑2: 与此同时,我意识到我要么必须手动检查文件是以正确的顺序连接还是我必须使用工具。像require.js或者steal.js(?)之类的东西。这需要在节点服务器上运行代码(至少需要)。要在浏览器中使用它,我可能需要浏览它。