uglifyjs 不混淆全局变量
uglifyjs not obfuscating global variable
我正在使用 uglifyjs(通过 grunt)并试图混淆全局变量,但它不起作用。我正在使用带有 mangle 的 'toplevel' 选项。
想知道是否有人可以回答为什么?
绕过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();
丑化代码为:
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
保持不变?
如果我用 'var' 关键字将 foo
声明为 var foo = 5;
,那么它确实会被混淆。我在这里错过了什么?
谢谢!
当你在不使用 var 的情况下执行 foo = 5
时,它被视为赋值,而 var foo = 5
是一个声明。赋值变量名称没有被混淆的原因是它假设它是在全局范围内当前 js 之外的其他地方声明的。在浏览器中,全局范围内的所有内容都与 window
相关联。因此,例如,如果您执行 location = 'http://www.google.com.au';
,它会将您的浏览器发送到 google。如果 location
被混淆,那么代码将无法正常运行。
我正在使用 uglifyjs(通过 grunt)并试图混淆全局变量,但它不起作用。我正在使用带有 mangle 的 'toplevel' 选项。
想知道是否有人可以回答为什么?
绕过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();
丑化代码为:
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
保持不变?
如果我用 'var' 关键字将 foo
声明为 var foo = 5;
,那么它确实会被混淆。我在这里错过了什么?
谢谢!
当你在不使用 var 的情况下执行 foo = 5
时,它被视为赋值,而 var foo = 5
是一个声明。赋值变量名称没有被混淆的原因是它假设它是在全局范围内当前 js 之外的其他地方声明的。在浏览器中,全局范围内的所有内容都与 window
相关联。因此,例如,如果您执行 location = 'http://www.google.com.au';
,它会将您的浏览器发送到 google。如果 location
被混淆,那么代码将无法正常运行。