使用全局对象对我来说是个问题。这是一个简单的例子,说明了我的问题:
在a.js
:
goog.provide('app.a');
goog.require('app.b');
app.a = function () {
return [
app.b('Hey, there!'),
app.c('yo')
];
};
请注意,在上述文件中,我使用app.c
而未明确要求它。
在b.js
:
goog.provide('app.b');
goog.require('app.c');
app.b = function (msg) {
return app.c('b ' + msg);
};
在c.js
:
goog.provide('app.c');
app.c = function (msg) {
return { msg: msg };
};
我可以通过closurebuilder来运行它,它会运行得很好。它也将在浏览器中无错误地运行。但我不喜欢app.c
在没有明确要求的情况下可以使用的方式。
我能想到的最佳解决方案是,每个文件是否可以某种方式使用自己的app
调用构建的goog.require
全局变量副本。当您尝试使用不是require
d的内容时,这会导致运行时错误。不确定这是否可行。
有没有办法做我描述的,或者有其他选择吗?
答案 0 :(得分:0)
没有理由不在app.a中提出app.c的要求,这是一种最佳做法但是如果不这样做,它将无法捕获它,因为编译器需要采用这些要求。如果你删除了app.b的要求,只会出现许多很多很多关闭土地的怪癖,那就会引发错误。