传送门:https://www.cnblogs.com/52cik/p/js-unpacker.html
上面链接是一种最基础的js打包方式,其中对于
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[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;}('(1(){1 4(0){6(0){2 0};2 5};7 3=4();8(3)})();',9,9,'a|function|return|ret|test|123|if|var|alert'.split('|'),0,{}))
这种packed打包的代码,去掉eval在控制行里回车即可看到结果
有个疑问,为什么要保留()?
不保留括号会报错。
是js匿名函数的语法特性。
用下图四个情况清楚地解释原因: