混淆javascript属性?

sho*_*osh 6 javascript obfuscation minify

我最近测试了UglifyJS和YUI Compressor并发现了一些奇怪的东西.
两个minifiers似乎都没有改变对象属性的名称,只改变变量和函数的名称.

例如,如果我有以下代码:

var objName = {first:2, second:4};
alert(objName.first + " " + objName.second);
Run Code Online (Sandbox Code Playgroud)

名称first并second在缩小版本中保持不变.
这是为什么?

use*_*716 9

因为在javascript中,在函数中创建了一个新的作用域,所以可以将代码置于一个立即调用的函数中.

   // scoped
(function() {
    var objName = {first:2, second:4};
    alert(objName.first + " " + objName.second);
})();
Run Code Online (Sandbox Code Playgroud)

然后使用Google的Closure Compiler,如果打开"高级"优化,它将看到属性仅在本地使用,并将对它们进行模糊处理.

   // result
var a={a:2,b:4};alert(a.a+" "+a.b);
Run Code Online (Sandbox Code Playgroud)


Ric*_*kir 8

这是因为它不知道对象的使用位置.它可以在其他代码的外部使用,并且您不希望其他代码在您对其进行模糊处理时进行更改.

编辑所以基本上,这就是为了防止模糊处理破坏对混淆时可能无法弄清楚的属性的外部/内部引用.