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

Javascript JS压缩器重命名变量时如何通过eval()设置变量?,javascript,compression,Javascript,Compression,我有一个JS文件,它的功能如下: var value = localStorage.getItem(somekey); if ( !value ) { eval("value = String(" + somevariablename + ");"); } var f=localStorage.getItem(e); if(!f){eval("value = String("+e+");")} 此脚本尝试从本地存储中检索值。如果该值在本地存储器中不存在,它将设置为使用先前定义的变量值的e

我有一个JS文件,它的功能如下:

var value = localStorage.getItem(somekey);
if ( !value )
{
  eval("value = String(" + somevariablename + ");");
}
var f=localStorage.getItem(e);
if(!f){eval("value = String("+e+");")}
此脚本尝试从本地存储中检索值。如果该值在本地存储器中不存在,它将设置为使用先前定义的变量值的eval off。在这种情况下,eval对我来说是必要的,因为
value
的值必须设置为变量名的字符串值。我不知道还有别的办法

问题是,大多数好的JS压缩器都提供了一种自动重命名变量名的方法,以节省空间。我的结局是这样的:

var value = localStorage.getItem(somekey);
if ( !value )
{
  eval("value = String(" + somevariablename + ");");
}
var f=localStorage.getItem(e);
if(!f){eval("value = String("+e+");")}
所以问题是我的变量被重命名了,但是压缩器不知道如何更改eval字符串中变量的名称。我从来没有见过一台足够聪明的压缩机能够解决这个问题


在构建环境中,以自动化方式处理此问题的最佳方法是什么?在eval中手动更改变量名非常耗时,因为在我的例子中,这样的代码经常出现。

不要使用eval动态创建变量

您只需捕获全局对象,然后在其上创建的任何属性都是全局范围内的变量

窗口[“值”]=“某物”


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

为什么要使用eval?只要使用
value=somevariablename.toString()
就可以这样使用eval:
value=eval(“String”(+somevariablename+))
-问题是:如果变量名发生了变化,您如何确定
somevariablename
中的变量名是正确的?