一个显然总是假的 if 语句,例如。 if (false)
,闭包删除语句。
我的代码是这样的:
if (settings.lang === "en"){
lib.doSomething();
}
settings.lang
是一个常量。
/**
* @type {string}
* @const
*/
settings.lang = "fr" ;
因此,当它等于“fr”时,编译器可以在编译时删除 if
和 lib.doSomething
的定义。但事实并非如此。有什么办法让它做到这一点吗?
在您问我为什么不直接删除该代码之前:对于其他客户端,settings.lang
设置为 en
。
最佳答案
1) 确保正确定义“设置”:
/** @const */
var settings = {};
2) 确保正确定义“设置”语言:
/** @const */
settings.lang = "fr" ;
3) 确保值在定义后被引用:
if (settings.lang == "en") ...
在高级模式下,如果未以防止属性折叠的方式使用设置(例如,将“设置”作为参数传递给函数将导致值转义和不可折叠),则这将被内联和删除。
如果你使用@define,这会被简化:
/** @const */
var settings = {};
/** @define {string} */
settings.lang = "fr";
如果定义的定义在某种程度上无效,您应该收到警告。
关于javascript - 让 Closure/Plovr 从 if 中删除函数,它总是 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17150962/