JavaScript 〜 グローバルオブジェクトの衝突を防ぐ

JavaScriptでは、トップレベルコードの変数はグローバル変数となる。グローバル変数は名前が同じであってはならないが、ライブラリを導入した場合に自前で定義したグローバル変数とライブラリで定義されたグローバル変数の名前が一致してしまう可能性がある。

その可能性を最小にするために、名前空間パターンを使用する。
名前空間パターンとは、アプリケーションやライブラリ毎に作成するグローバル変数を1つにして、そのグローバル変数にあらゆる機能を追加するパターンである。

下記コードは「JavaScriptパターン」から引用した。

JavaScriptパターン ―優れたアプリケーションのための作法

JavaScriptパターン ―優れたアプリケーションのための作法

//グローバル変数を使用して名前空間を作成
var MYAPP = {};

//コンストラクタの生成
MYAPP.Parent = function(){};
MYAPP.Child = function(){};

//変数
MYAPP.some_var = 1;

//オブジェクトのコンテナ
MYAPP.modules = {};

//入れ子になったオブジェクト
MYAPP.modules.module1 = {};
MYAPP.modules.module1.data = {a:1, b:2};
MYAPP.modules.module2 = {};
//

このようにすることは、グローバル変数の衝突を避ける良い方法である。
ただ1つのグローバル変数MYAPPが、他のライブラリで使用されていなければ、MYAPPオブジェクト(名前空間)には、他のライブラリと名前が衝突する危険性を考えずに変数を定義できる。