0
可達代碼爲什麼有SIMPLE_OPTIMIZATIONS谷歌關閉編譯器不會刪除標@define註釋
/**
* @define {boolean}
*/
var TEST = false;
(function() {
if (TEST) {
foo();
}
})();
,而是我得到以下編譯後的代碼不會導致一個空字符串?
var TEST=!1;(function(){TEST&&foo()})();
的if
不可達,但關閉編譯器不會刪除代碼。
「高級優化」結果是我期望的結果(空),但「簡單優化」給出了上述結果。爲什麼這個區別?在這兩種情況下,代碼都不會執行。
編輯:
如果我刪除關閉之後,if
塊也會被刪除。爲什麼封閉這不會發生?
是的,但爲什麼使用「簡單優化」的代碼不會被刪除? – raxell
嗯,因爲這是一個被認爲是「高級」的優化:) 我不確定簡單/高級拆分是如何確定的,說實話。 – MatrixFrog
簡單優化只進行本地優化(僅限一個或多個函數內的值)。全局值不會被移動,內聯等。它很「簡單」,因爲您不需要遵循任何特定的編碼風格才能使其工作。高級模式是不同的:如果你不導出編譯器試圖刪除它的東西。這可能會破壞帶有外部引用的代碼。 – John