Closure Compilerが次の 2 つの関数に対して( advanceオプションを使用して) 異なるコードを生成するのはなぜですか?
var function1 = function() {
return 1 * Math.random();
};
window['function1'] = function1; // export function1
var function2 = function() {
return function1() + 1;
};
window['function2'] = function2; // export function2
生成されたコードは次のとおりです。
function a() {
return 1 * Math.random();
}
window.function1 = a;
window.function2 = function() {
return a() + 1; // call to a() fails in a more complex example
};
function1
に名前が変更され、グローバル変数 に割り当てられているa
ことa
に注意してくださいfunction1
。それにfunction2
関連付けられている他の変数名はありません。なんで?
私が尋ねる理由は、私のコードの場合、function1
fromへの呼び出しがfunction2
失敗するためです。これは、名前が変更さfunction1
れたものが関数呼び出しとして認識されfunction2
ず、Javascript インタープリターがそれa()
を数値と見なすためです。
どんな洞察も高く評価されます。ティア。