6

これは特定の問題ではなく、より理論的な問題です。単一の Javascript アプリケーションに対して複数のグローバル変数を公開する正当な理由はありますか?

単一のグローバル変数を使用して、アプリケーションを含むオブジェクトまたはクラスに名前を付けて、複数回呼び出すことができるようにすることができます (以下の例)。オブジェクト プロパティで置き換えることができませんでした。

公開された変数が生活を楽にする例 (クロージャーを使用すると、リコールできませんでした):

var myGlobalApp = {
    init: function (args) {...},
    methodOne: function () {...},
    methodTwo: function () {...},
    propertyOne: 'string for example'
};
myGlobalApp.init(arg1);
myGlobalApp.init(arg2);

複数のグローバル変数が必要になるインスタンスのケースを知っている人はいますか?

4

5 に答える 5

4

複数のグローバルを持つことが厳密に必要だとは思いません。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 個のグローバルがあります。

于 2013-08-07T16:32:50.520 に答える
0

複数のグローバル変数が必要になるインスタンスのケースを知っている人はいますか?

グローバル変数は必要ありません。グローバル変数を使用する JavaScript コードは、不要になるように書き換えることができます。

この例でもグローバル変数は必要ありませんが、代わりに以下に示すように自己実行関数を使用できます。

(function(arg1, arg2) {
    var init = function (args) {...};
    var methodOne = function () {...};
    var methodTwo = function () {...};
    var propertyOne = 'string for example';

    init(arg1);
    init(arg2);
})(arg1, arg2);

明らかに、ライブラリはそのライブラリを使用するためのグローバル変数を公開することがよくあります。たとえば、jQuery はグローバル変数jQuery$. ただし、単一の JavaScript アプリケーションの場合、グローバル変数は必要ありません。

于 2013-08-07T16:39:05.857 に答える