入力 JavaScript の最小限の例を次に示します (別の言語によって生成されますが、それはここでもそこでもありません)。
goog.provide('foo.bar');
foo.bar.baz = 42;
goog.exportSymbol('foo.bar.baz', foo.bar.baz);
foo.bar.quux = (function quux(){return foo.bar.baz;
});
goog.exportSymbol('foo.bar.quux', foo.bar.quux);
私の期待はfoo.bar.baz
、定数として注釈が付けられていないため、定数として扱われないことです。それでも、高度な最適化 (ローカルおよびコンパイラ サービス経由の両方) は、いずれにせよインライン化します。
var d = this;
function f(g, e) {
var b = g.split("."), a = d;
b[0] in a || !a.execScript || a.execScript("var " + b[0]);
for (var c;b.length && (c = b.shift());) {
b.length || void 0 === e ? a = a[c] ? a[c] : a[c] = {} : a[c] = e;
}
}
;f("foo.bar.baz", 42);
f("foo.bar.quux", function() {
return 42;
});
一定のインライン化は優れていますが、問題の値はエクスポートされているため、インライン化することは安全ではありません。goog.exportProperty
と の代わりにと@expose
の注釈を使用してみましたがgoog.exportSymbol
、うまくいきませんでした。
ヘルプ?ありがとう!