当JS压缩器重命名变量时,如何通过eval()设置变量?

时间:2012-12-11 06:10:55

标签: javascript compression

我有一个JS文件,可以这样做:

var value = localStorage.getItem(somekey);
if ( !value )
{
  eval("value = String(" + somevariablename + ");");
}

此脚本尝试从Local Storage检索值。如果本地存储中不存在该值,则它将设置为使用先前定义的变量的值的eval。在这种情况下,eval对我来说是必要的,因为value的值必须设置为变量名的String值。我不知道其他任何方式。

问题在于,大多数优秀的JS Compressors都提供了一种自动重命名变量名以节省空间的方法。我最终得到这样的东西:

var f=localStorage.getItem(e);
if(!f){eval("value = String("+e+");")}

所以问题是我的变量被重命名但压缩器不知道改变eval字符串中变量的名称。我从来没有见过一个足够智能的压缩器来解决这个问题。

在构建环境中以自动方式处理此问题的最佳方法是什么?进入并手动更改evals中的变量名称非常耗时,因为在我的情况下,这样的代码会发生很多。

1 个答案:

答案 0 :(得分:2)

不要使用eval动态创建变量。

您可以简单地捕获全局对象,然后在其上创建的任何属性都是全局范围内的变量...

window [“value”] =“某事”;

然后通过这种方式创建变量,您不必使用eval来获取变量名称,因为您使用字符串创建它们。