1

为此,使用全局对象对我来说存在问题。这是说明我的问题一个简单的例子:有没有办法`goog.provide`而不使用全局对象?

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

没有理由不把app.c放在app.a中,这是一个最佳实践,但是如果你不是因为编译器收集需求的方式,它不会捕获它。如果你删除了app.b的要求,它会抛出一个错误,只是封闭土地的许多许多怪癖之一。

相关问题