複数のグローバルを持つことが厳密に必要だとは思いません。JavaScript オブジェクトは任意にネストでき、多くの場合、名前空間のように使用できます。
window.AwesomeModule = {
app: {
...
},
util: {
...
}
};
実際、アプリが再利用できるように作成されていない場合 (つまり、ユーザー向けのアプリである場合)、おそらくグローバルをリークすることはありません。
(function() {
var AwesomeModule = { ... };
// Do whatever you want - create DOM nodes, bind to events, etc
// Just don't bind anything to window
})();
もっと興味深い質問は、複数のグローバルを持つことが本当に役立つかどうかということです。それは開発スタイルに依存すると思います。たとえば、一般的に C# と .NET を見ると、フレームワーク全体(多かれ少なかれ)、名前空間、およびすべてが最上位の名前空間の下に格納されていることがわかりますSystem
。
もちろん、複数のコンポーネントを備えた巨大な JavaScript アプリを作成する場合は、そのようなネストされた構造は絶対にお勧めしません (扱いにくい可能性があることに加えて、JavaScript オブジェクト属性のルックアップには明確なランタイム コストがかかるため、追加される可能性があります)。
...とはいえ、JavaScript のランドスケープはあまりよく整理されていません。グローバル属性を簡単にチェックすると、マシンの空のページ(Chrome を実行)で約 56 個のアイテムが生成されます。
var i = 0;
for (var prop in window) {
if (window.hasOwnProperty(prop)) {
i++;
}
}
そのため、独自のグローバルな使用を最小限に抑えることはできますし、また最小限に抑える必要がありますが、現在の JS 環境 (特に外部ライブラリを使用する場合) には、グローバルの急増が伴います。例: StackOverflow には合計で約 144 個のグローバルがあります。