bata's log

フロントエンド系のTipsとかメモ

即時関数の引数を使って名前空間を作る

即時関数の引数を使った名前空間の作り方を教えてもらったのでメモ。

(function(window, namespace){
    
    window[namespace] = {
        fuga : function(){
            document.write('Hello!');
        }
    };
    
})(this, 'Hoge');

Hoge.fuga();

グローバルオブジェクトにHogeを追加して名前空間を作ります。
中の変数や関数はHogeを通じて呼び出すので、名前の衝突を避ける事ができます。

windowを引数にしてthisを代入する理由はこれ。

・window ではなく this を使う理由
"window" がブラウザ依存の名前だから。
例えば、node.js では global ですし、WSH では グローバルオブジェクトに名前がありません。
this は ECMAScript 規定なので JavaScript ならどの実装でも必ずアクセスできます。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1054661400