为了进一步阐明,我的意思是Closure编译器正在输出JavaScript的哪些部分?
由于游戏的名称是代码优化,因此我绝对可以理解这是否是一个移动的目标,因此,在这种情况下,对源代码相关位的引用可能是最有用的。
在文档中指定了闭包编译器的限制:
编译器仅识别ECMAScript。ECMAScript 5是几乎所有地方都支持的JavaScript版本。但是,编译器还支持ECMAScript 6中的许多功能。编译器仅支持官方语言功能。
- 编译器不保留注释。
- 使用
with
编译器时,无法区分局部变量和相同名称的对象属性,因此它会重命名该名称的所有实例。- 编译器不会解析
eval
()的字符串参数,因此不会重命名该参数中的任何符号。- 编译器会重命名函数和函数参数,但不会更改代码中按名称引用函数或参数的任何字符串。
- 为了正确地重命名全局变量,函数和属性,编译器必须知道对这些全局变量的所有引用。您必须告诉编译器有关在正在编译的代码之外定义的符号的信息。高级编译和外部描述了如何声明外部符号。
- 编译的代码必须导出未编译的代码所引用的任何符号。高级编译和外部描述了如何导出符号。
- 编译器在“高级”模式下重命名属性,但从不重命名字符串。如果需要用带引号的字符串引用属性,请始终使用带引号的字符串:
- 编译器独立重命名属性和变量
- 当您编译函数而不编译调用这些函数的代码时,编译器会假定这些函数从未被调用并删除它们。
- 属性展平可以更改函数中关键字this的含义。
- 使用Object.defineProperties或ES6 getter / setters:编译器不太了解这些构造。
如果要使用结果检查语法树-但是闭包编译器的输出是ES5或ES3,则它们不保证输出代码中使用的实际功能。有关确切的支持,请参见“ Closure Compiler支持的JavaScript”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句