2015-10-20 68 views
0

可达代码为什么有SIMPLE_OPTIMIZATIONS谷歌关闭编译器不会删除标@define注释

/** 
* @define {boolean} 
*/ 
var TEST = false; 
(function() { 
    if (TEST) { 
     foo(); 
    } 
})(); 

,而是我得到以下编译后的代码不会导致一个空字符串?

var TEST=!1;(function(){TEST&&foo()})(); 

if不可达,但关闭编译器不会删除代码。
“高级优化”结果是我期望的结果(空),但“简单优化”给出了上述结果。为什么这个区别?在这两种情况下,代码都不会执行。

编辑
如果我删除关闭之后,if块也会被删除。为什么封闭这不会发生?

回答

1

我相信它会被删除,如果使用“高级优化”

+0

是的,但为什么使用“简单优化”的代码不会被删除? – raxell

+0

嗯,因为这是一个被认为是“高级”的优化:) 我不确定简单/高级拆分是如何确定的,说实话。 – MatrixFrog

+3

简单优化只进行本地优化(仅限一个或多个函数内的值)。全局值不会被移动,内联等。它很“简单”,因为您不需要遵循任何特定的编码风格才能使其工作。高级模式是不同的:如果你不导出编译器试图删除它的东西。这可能会破坏带有外部引用的代码。 – John