这是输入 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;
});
常量内联很棒,但考虑到它是导出的,有问题的值内联是不安全的。除了 and 而不是 ,我尝试使用goog.exportProperty
and注释,但没有运气。@expose
goog.exportSymbol
帮助?谢谢!