の用法:
var MyClass = (function (window, document, Math, undefined) {
...
})(window, document, Math, undefined);
見当違いです。ネイティブ メソッドへの「安全な」アクセスを取得することが意図されている場合、コードの実行前にこれらの識別子に新しい値が既に割り当てられていると失敗します。
あなたができる最善のことは次のとおりです。
var myClass = function(global) {
// In here you can be certain that global references the global (window) object
var window = global;
// and that the value of undefined will be undefined
var undefined;
// But you are still uncertain of
var document = window.document;
var Math = window.Math;
...
// guaranteed access to the global object
}(this));
thisの値は、どのコンテキストでも上書きできません (ただし、呼び出しまたはバインドを使用して関数に入るときに設定できます)。そのため、グローバル実行コンテキストでは、元のグローバル オブジェクトを参照する必要があります。ただし、Mathおよびウィンドウプロパティが再割り当てされている可能性があり、それを止めることはできません (ただし、ECMAScript の将来のバージョンでは、特定の状況でそれが不可能になる可能性があります)。
そのため、関心のあるプロパティが再割り当てされる前に IIFE を実行する必要がある場合、エイリアスを作成しても何の価値もありません。他の人が言ったように、それはミニフィケーションに役立つかもしれません。
ホスト オブジェクトとメソッドのエイリアスの作成には問題があることに注意してください。
var getEl = document.getElementById;
var el = getEl('foo');
getElementById関数がドキュメントのメソッドとして呼び出されることを想定している可能性があるため、エラーがスローされる可能性があり、したがってthisが正しく設定されていない可能性があります。