Javascript 有没有一种方法可以在不使用全局对象的情况下提供一些东西?

Javascript 有没有一种方法可以在不使用全局对象的情况下提供一些东西?,javascript,dependency-management,google-closure-library,Javascript,Dependency Management,Google Closure Library,为此使用全局对象对我来说是个问题。下面是一个简单的例子,说明了我的问题: 在a.js中: 注意,在上面的文件中,我使用app.c时没有明确要求它 在b.js中: 在c.js中: 我可以通过closurebuilder运行这个,它会运行得很好。它也将在浏览器中正常运行。但我不喜欢app.c在没有明确要求的情况下是如何可用的 我能想到的最好的解决方案是,如果每个文件都能以某种方式使用自己的app全局变量副本,该变量是由goog.require调用生成的。当您尝试使用不需要的东西时,这将导致运行时错误

为此使用全局对象对我来说是个问题。下面是一个简单的例子,说明了我的问题:

在a.js中:

注意,在上面的文件中,我使用app.c时没有明确要求它

在b.js中:

在c.js中:

我可以通过closurebuilder运行这个,它会运行得很好。它也将在浏览器中正常运行。但我不喜欢app.c在没有明确要求的情况下是如何可用的

我能想到的最好的解决方案是,如果每个文件都能以某种方式使用自己的app全局变量副本,该变量是由goog.require调用生成的。当您尝试使用不需要的东西时,这将导致运行时错误。不确定这是否可行


是否有一种方法可以实现我所描述的,或者是否有其他替代方法?

没有理由不在app.a中添加app.c的需求,这是一种最佳实践,但是的,如果您不这样做,它将无法捕获,因为编译器获取需求的方式。如果你删除了app.b的要求,它会抛出一个错误,这只是closureld的众多怪癖中的一个

goog.provide('app.a');

goog.require('app.b');

app.a = function () {
    return [
        app.b('Hey, there!'),
        app.c('yo')
    ];
};
goog.provide('app.b');

goog.require('app.c');

app.b = function (msg) {
    return app.c('b ' + msg);
};
goog.provide('app.c');

app.c = function (msg) {
    return { msg: msg };
};