2

私は(うなり声を介して)uglifyjsを使用しており、グローバル変数を難読化しようとしていますが、機能していません。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();

醜いコードは次のとおりです。

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;難読化されます。ここで何が欠けていますか?

ありがとう!

4

1 に答える 1

3

var なしで行っている場合、宣言foo = 5と比較して代入と見なされます。var foo = 5割り当て変数名が難読化されない理由は、グローバル スコープ内の現在の js の外側のどこかで宣言されていると想定しているためです。ブラウザでは、グローバル スコープ内のすべてが に関連付けられていwindowます。たとえばlocation = 'http://www.google.com.au';、ブラウザをGoogleに送信するとします。location難読化すると、コードが正しく機能しなくなります。

于 2015-01-18T06:05:58.167 に答える