事情是这样的:
我使用的是让我的手机(iPhone / Android的)应用程序模块化的方式CommonJS的。 这并不奇怪。 但有一两件事,我只是不在身边让我的头。
CommonJS的让我创建静态私有变量,它可以让我安心创建单身。 这一点,我觉得至少,是因为得到一个文件的内容require()
d是只读一次,然后出口对象(这是只有一次初始化)返回每次。
但是,当我创建如下所示循环引用,所包括的模块中的代码每次执行。
等待......有趣的是,当我在写这个问题,我突然意识到,没有一个电话来require()
完成下一个开始(因此堆栈溢出下面演示)前。
关于我是否在轨道或不是有什么想法? 这是过去5点过来,所以所有的赌注都关闭,据我而言:d。
例子:
看到这一段代码,它定义了一个单例:
/* Singleton.js */
exports.getSingleton = getSingleton;
function getSingleton(name) {
if (!instance) {
instance = new Thing(name);
}
return instance;
}
function Thing(name) {
this.name = name;
}
var instance;
我require()
这个文件为这样:
var theFirstThing = require('Singleton').getSingleton('first');
Ti.API.info('first: ' + theFirstThing.name)
var possiblyAnotherOtherThing = require('Singleton').getSingleton('second');
Ti.API.info('second: ' + possiblyAnotherOtherThing.name);
输出是:
[DEBUG] loading: /path/to/sim/MyApp.app/app.js, resource: app_js
[DEBUG] loading: /path/to/sim/MyApp.app/Singleton.js, resource: Singleton_js
[INFO] first: first
[INFO] second: first
为什么那么像下面是循环引用不工作? (我可能会,如果你喜欢已经ansered此我自己,评论/回答就可以了)。
app.js
require('Banana');
Pinapple.js
require('Banana');
Banana.js
require('Pineapple');
由于输出是这样的:
[DEBUG] loading: /path/to/simulator/MyApp.app/app.js, resource: app_js
[DEBUG] loading: /path/to/simulator/MyApp.app/Banana.js, resource: Banana_js
[DEBUG] loading: /path/to/simulator/MyApp.app/Pineapple.js, resource: Pineapple_js
[DEBUG] loading: /path/to/simulator/MyApp.app/Banana.js, resource: Banana_js
[DEBUG] loading: /path/to/simulator/MyApp.app/Pineapple.js, resource: Pineapple_js
[DEBUG] loading: /path/to/simulator/MyApp.app/Banana.js, resource: Banana_js
[DEBUG] loading: /path/to/simulator/MyApp.app/Pineapple.js, resource: Pineapple_js
[DEBUG] loading: /path/to/simulator/MyApp.app/Banana.js, resource: Banana_js
/* etcetera (total of 15 times back and forth) */
[DEBUG] loading: /path/to/simulator/MyApp.app/Pineapple.js, resource: Pineapple_js
[DEBUG] loading: /path/to/simulator/MyApp.app/Banana.js, resource: Banana_js
[DEBUG] loading: /path/to/simulator/MyApp.app/Pineapple.js, resource: Pineapple_js
[ERROR] Script Error = Maximum call stack size exceeded. (unknown file)