1

JavaScriptを独自の名前スコープで記述するとは、どうやら競合を回避し、W3C標準に準拠しているようですが、それが何を意味するのか、どのように行われるのかわかりません。

4

3 に答える 3

5

これは、グローバル変数の使用を最小限に抑える方法です(したがって、競合の可能性を回避します)。

var myNS = {}; // Your namespace (an object) = a global var.
myNS.title = "Demo"; // Your variables come here as object properties.
myNS.date = "2012-05-21";

オブジェクトのプロパティは、スカラー型、配列、オブジェクト、関数など、どのタイプでもかまいません。

于 2012-05-14T13:24:04.037 に答える
5

私があなたが意味すると思うのは名前空間です。これは、グローバルスコープを汚染しないように、名前空間にコードを含める必要があることを意味します(まあ、1つの変数だけで汚染したので、それだけです)。作成しようとしているすべての関数やその他のものは、その名前空間に存在します。

オブジェクトリテラルの単純な名前空間の例

var ns = {
    foo : function(){...},
    bar : function(){...}
}

宣言したグローバルは1つだけnsです。残りはそこに保存され、ns

ns.foo();
ns.bar();

実際の例は、JSフレームワークで見ることができます。たとえば、jQueryとUnderscoreがあります

//jQuery uses "jQuery" and "$" as namespaces and has "each()"
$.each();

//Underscore has "_" as a namespace and also has "each()"
_.each();

それらは同じ関数名を持っていますが、別々の名前空間に存在します。これにより、競合が回避され、何がどこに属するかを特定するのに役立ちます。

于 2012-05-14T13:24:23.893 に答える
3

グローバル関数を書くのではなく、自分のオブジェクトに関数を書くことを意味していると思います。

var myScope = (function() {

    function privateFunction1() {...}
    function privateFunction2() {...}
    function a() {...}
    function b() {...}
    function c() {...}

    return {a: a, b: b, c: c};

})();
于 2012-05-14T13:25:37.483 に答える