0
可达代码为什么有SIMPLE_OPTIMIZATIONS谷歌关闭编译器不会删除标@define注释
/**
* @define {boolean}
*/
var TEST = false;
(function() {
if (TEST) {
foo();
}
})();
,而是我得到以下编译后的代码不会导致一个空字符串?
var TEST=!1;(function(){TEST&&foo()})();
的if
不可达,但关闭编译器不会删除代码。
“高级优化”结果是我期望的结果(空),但“简单优化”给出了上述结果。为什么这个区别?在这两种情况下,代码都不会执行。
编辑:
如果我删除关闭之后,if
块也会被删除。为什么封闭这不会发生?
是的,但为什么使用“简单优化”的代码不会被删除? – raxell
嗯,因为这是一个被认为是“高级”的优化:) 我不确定简单/高级拆分是如何确定的,说实话。 – MatrixFrog
简单优化只进行本地优化(仅限一个或多个函数内的值)。全局值不会被移动,内联等。它很“简单”,因为您不需要遵循任何特定的编码风格才能使其工作。高级模式是不同的:如果你不导出编译器试图删除它的东西。这可能会破坏带有外部引用的代码。 – John