使用 Google Closure Compiler 我发现在某些情况下它会调用未定义的本地函数。我发现的显示这一点的最小示例是:
var apa = {
/** @this {!Object} */
foo: function () { this.bar(id()); },
bar: function (x) { return [x]; }
};
apa.foo();
编译为
(function(){this.a(id())})();
编译时使用closure --compilation_level ADVANCED_OPTIMIZATIONS
. 默认编译(没有任何选项)编译为:
var apa={foo:function(){this.bar(id())},bar:function(a){return[a]}};apa.foo();
在最小版本this.a
中是未定义的。
在我的研究中,我没有发现任何导致这种行为的任何迹象,老实说,我对此感到非常困惑。这是关闭中的错误还是我做出了某种错误的假设?
(任何关于如何解决这个问题的建议都将不胜感激,因为我非常需要在不手动操作的情况下尽可能地减少 js)。