uglifyjs不会混淆全局变量

时间:2015-01-18 05:45:40

标签: gruntjs uglifyjs uglifyjs2

我正在使用uglifyjs(通过grunt)并且我试图获得一个混淆的全局变量,但它不起作用。我正在使用“toplevel”选项和mangle。

想知道是否有人能回答原因?

绕过grunt并直接使用uglify,我使用的命令行是:

uglifyjs js/a.js -c -m toplevel -o dist/scripts.js

a.js的内容是:

foo = 5;

function bar() {
  var excellent = 10;

  var myvar = excellent*excellent;

  console.log('myvar = ' + myvar);
}

bar();

function useAGlobal() {
  console.log('foo = ' + foo);
}

useAGlobal();

,uglified代码是:

function o(){var o=10,n=o*o;console.log("myvar = "+n)}function n(){console.log("foo = "+foo)}foo=5,o(),n();

我可以看到全局函数bar()useAGlobal()被混淆得很好,但为什么变量foo保持不变?

如果我将foo的'var'关键字声明为var foo = 5;,那么它会被混淆。我在这里缺少什么?

谢谢!

1 个答案:

答案 0 :(得分:3)

当您执行foo = 5没有变更时,它被认为是与var foo = 5相比较的赋值。赋值变量名称没有被混淆的原因是它假设它被声明在全局范围内当前js之外的其他地方。在浏览器中,全局范围内的所有内容都与window相关联。因此,如果您举例location = 'http://www.google.com.au';,它会将您的浏览器发送到谷歌。如果要对location进行模糊处理,则代码将无法正常运行。

相关问题