为什么Closure Compiler不重命名具有特定名称的对象?

时间:2012-10-01 09:54:52

标签: google-closure-compiler

当我在http://closure-compiler.appspot.com处的闭包编译器中测试以下代码时:

// ==ClosureCompiler==
// @output_file_name default.js
// @compilation_level ADVANCED_OPTIMIZATIONS
// @formatting pretty_print
// ==/ClosureCompiler==

// These get renamed
window.foo = {};
window.bar = {};

// These don't
window.uid = {};
window.test = {};

输出结果为:

window.a = {};
window.b = {};
window.uid = {};
window.test = {};

为什么要重命名:

window.foo = {};
window.bar = {};

但不是:

window.uid = {};
window.test = {};

某些词似乎是一个问题?

1 个答案:

答案 0 :(得分:6)

更新

截至20150315版本的Closure-compiler,默认情况下会启用基于类型的优化。


Closure Compiler不会重命名与externs中对象上定义的任何属性同名的属性,除非启用了--use_types_for_optimization标志。有关详细信息,请参阅the project FAQ