javascript - 让 Closure/Plovr 从 if 中删除函数,它总是 false

标签 javascript google-closure-compiler google-closure plovr

一个显然总是假的 if 语句,例如。 if (false),闭包删除语句。

我的代码是这样的:

if (settings.lang === "en"){
    lib.doSomething();
}

settings.lang 是一个常量。

/** 
 * @type {string}
 * @const 
 */ 
settings.lang = "fr" ;  

因此,当它等于“fr”时,编译器可以在编译时删除 iflib.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/

相关文章:

javascript - 如何防止 Closure Compiler 重命名 "true"、 "false"和 "null"

javascript - 将 Google 闭包模板与 jQuery 结合使用

javascript - 使用 jQuery 更改 SquareSpace 上的图像

javascript - 如果选项等于值则动态添加新行

javascript - 如何对页面导航进行单元测试?

javascript - 闭包编译器没有使用 && 将此 if 语句扁平化为 "guard"

javascript - Google Closure 编译器服务提供无效代码

javascript - 寻找家谱

javascript - 我怎样才能让谷歌的闭包库加载得更快?

google-closure - 设置 goog.ui.Textarea 的宽度