如何防止闭包编译器删除未使用的局部变量?

时间:2018-10-11 14:59:15

标签: google-closure-compiler

我正面临以下一种情况,

function a() {
  var $$ = this;
  eval("some script");
}

使用具有简单级别的闭包编译器,它将在简化的输出中删除$$ var,但是脚本开发人员的代码“某些脚本”可能会使用此变量,因此无论如何都可以让闭包编译器保留var $$在输出?谢谢!

3 个答案:

答案 0 :(得分:2)

Solution: Export the Symbols You Want to Keep借用我建议您使用方括号表示法创建此变量。我假设您的全局元素是window

function a() { window['$$'] = this; eval("some script"); }

可能不漂亮,但this does work

输出

function a() { window.$$ = this; eval("some script"); }

答案 1 :(得分:0)

不是真的。您也许可以找到一种解决方法,但是不能保证它可以在将来的编译器版本中使用。

您需要重新编写代码,以免利用这样的eval。

答案 2 :(得分:0)

使用Function constructor

var a = new Function('var $$ = this; eval("some script");');

如果要避免转义“某些脚本”的内容,可以将其作为参数传递:

var a = new Function('script', 'var $$ = this; eval(script);');

这将所需的局部变量排除在编译器分析之外。