デバッグ モードでは、多くの個別の JavaScript ファイルに記述されているアプリケーションがありますが、ページのヘッド ブロックの一部として同期的に読み込まれます。リリースでは、これらのファイルをすべてマージして縮小します。今日、縮小版でエラーを見つけ続けたので、マージされたファイルを 1 つロードして問題をデバッグしたところ、1 つのライブラリが関数を自己実行しており、定義されている他の関数window
が実行されていることがわかりました。
ここでは、一般的なオブジェクトを使用して動作をレポしました。ウィンドウであるかどうかは関係ありません。
<head>
<script>
var a = {}
a.X = function x(){
console.log("shouldn't be executed");
}
(function(a){
console.log("self execution");
}(a));
</script>
</head>
この例では、次の出力を取得します
self execution
shouldn't be executed
呼び出しを変更すると
<head>
<script>
var a = {}
function x(){
console.log("shouldn't be executed");
}
a.X = x;
(function(a){
console.log("self execution");
}(a));
</script>
</head>
それから私はただ得る
self execution
これは私が期待したものです。最初の例で、 が自己実行関数に渡されたX
ときに呼び出されるのはなぜですか?a