1

我使用了这个 javascript 压缩器并检查了“Base62 编码”。我注意到它所做的第一件事就是将所有内容都包含在一个eval()函数中(这是有道理的),但我真的想避免使用它。有没有替代品??就像一个立即调用的函数表达式?

编辑:

我想压缩我的代码,因为有大量的条件if用于特征检测。(我不使用 Modernizr 的原因是因为我不想为我正在做的事情加载整个库),而且ifs 很难看。(另外我是 javascript 的新手,我宁愿学习 javascript 而不是学习 Modernizr)。

4

2 回答 2

2

您可以将 eval(...) 替换为 new Function(...)() ,如下所示:

new Function(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('2(a.6){3.4("5")[0].1+=" 6"}2(b.7){3.4("5")[0].1+=" 7"}2(8.9){3.4("5")[0].1+=" 9"}2(8.c){3.4("5")[0].1+=" d"}',14,14,'|className|if|document|getElementsByTagName|html|opacity|touch|html5|webworkers|css3|has|audio|html5audio'.split('|'),0,{}))()

这并不是一个真正的改进,但它避免了使用 eval。

于 2013-02-15T17:20:55.657 回答
0

在第一次检查时,Closure Compile不会将您的代码包装在eval()调用中。这是关于使用 GUI 版本的教程。

于 2013-02-15T17:03:21.920 回答