【问题标题】:How to tell Google Closure to drop variable initializations that are unused?如何告诉 Google Closure 删除未使用的变量初始化?
【发布时间】:2013-09-23 23:36:28
【问题描述】:

我的代码由几个文件组成,默认值可能会在初始化时被覆盖。默认情况下,Google Closure Compiler 将继续使用默认值进行初始化,尽管它从未使用过。是否有与@nosideeffects 等效的方法,以便删除第一个变量定义。

这是一个例子:

var a = 1;
a = 2;
window.console.log(a);

将被编译成(在高级模式下):

var a=1,a=2;window.console.log(a);

在我的例子中,默认值是一个相当长的字符串,我觉得有必要找到一种方法来告诉编译器只保留最新的。

【问题讨论】:

    标签: google-closure-compiler google-closure


    【解决方案1】:

    闭包编译器有几个只在函数体中运行的优化(因为它们在大型项目上运行成本太高):“流敏感内联”是你想要的。在简单模式下:

    function f() {
      var a = 1;
      a = 2;
      window.console.log(a);
    }
    

    变成:

    function f() {
      window.console.log(2);
    }
    

    除了不将代码置于全局范围之外,您无需执行任何操作即可启用此功能。

    【讨论】:

    • 谢谢!恐怕这意味着它无法完成。就我而言,我有一堆脚本级变量,它们在头文件的根目录中定义(然后在编译时与其余部分一起包装在一个闭包中)。为了对我的脚本进行版本控制,我用--define=XXXX 覆盖了这些变量。但是由于对象不能被覆盖,我包含一个单独的文件来覆盖标题和脚本之间的对象(当需要时)。我找不到丢弃标头初始化的方法......太糟糕了
    • 不会那么简单,但是有一种方法可以拥有一个变量 OVERRIDEN 并且只有在没有被覆盖时才初始化,但这意味着我需要重复一些我讨厌的东西(覆盖的变量和我覆盖的事实)...
    猜你喜欢
    • 2017-11-24
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多