2010-11-22 18 views

答えて

8

「var」キーワードを使用せずに、どの関数または関数でも実行できます。スクリプトがその値を読むことができるように、他のスクリプト(ページの一番上)の前にそれを割り当てます。

これはインクルードされたJSファイルに配置することもできますが、通常はグローバル値を簡単に見ることができるため、ページ上に配置する方が使いやすく、ページごとにサーバーサイドコードで変更できます。また、体内に大域変数を割り当てることを避けようとすると、混乱を招き、読みにくくなります。

<head> 
    <script> 
     var numberOfDucks = 1000; // Global 

     function some_function() { 
      // numberOfDucks is accessible here 
      alert (numberOfDucks); 
      // until you mask it by defining a local variable using the 'var' keyword 
      var myLocal = 0; // is a local 
      anotherGlobal = 0; // is a global 
     } 
    </script> 

    <script> 
     // potentially some other script 
    </script> 

    <script src="even_more_script.js"> 
</head> 

大域的な関数(implied-global)を定義することは、多大な混乱を招くため、良い考えではありません。

0
<head> 
<script> 
    var b = 0; 
</script> 
<script src="..."> 
</head> 
<body> 
    ... 
</body> 
1

変数をグローバル変数になるように任意の関数から外して宣言します。

ここにグローバル変数の例を示します。最初の関数はグローバルを使用しますが、2番目の関数はグローバルをマスクする同じ名前のローカル変数を使用します。

var globalVar = 1; 

function testFunc1() { 
    globalVar = 2; //Updates the global variable 
} 

function testFunc2() { 
    var globalVar = 5; // This variable masks the global and only updates within the scope of this function 
    globalVar = 3; 
} 

また、スニペットは他の参照の前にグローバルを初期化する必要があると述べました。このためには、できるだけ要素内の他のjavascript参照の前に、スクリプトブロックまたはjavascriptファイルへの参照を配置することをお勧めします。グローバル変数に依存する他のjavascriptファイルがある場合、defer属性を使用して残りのページが最初にロードされるまでロードされないようにすることができます。

<script src="dependant.js" type="text/javascript" defer="defer"></script> 

もう1つの選択肢は、初期スクリプトがロードされた後に依存スクリプトを動的に追加することです。あなたは次のようにjQueryのようなものを使用してこれを行うことができます。

$(window).load(function() { 
    $.getScript('dependant.js'); 
}); 
24

グローバル変数を持たないためにだけの方法は、関数のスコープでvarキーワードを使用することです。それ以外はグローバル変数です。

(function() { 
    var local = 5; 
})(); 

関数リテラルまたは関数定義であれば、それは、機能のいくつかのタイプであることをを持っている問題ではありません。

グローバル変数の例:

:上記

var global = 5; 

、関数スコープにvarを用いても、したがってグローバルありません。

2。上記で

(function() { 
    global = 5; 
})(); 

、何varを使用しないので、暗黙のグローバルなるました。

function foo(){} 

foo他の機能の中で定義またはグローバルにアクセス可能なので、対象キーに割り当てられていませんでした。

4.

(function() { 
    var local = global = 5; 
})(); 

varと複数の割り当てを行う場合、最初の変数はローカルになり...そうglobalは、グローバル変数で、5

に相当します5.

window.foo = 5; 

接頭辞window.は、ブラウザのコンテキストでグローバル変数を明示的に定義する方法です。 DOMWindowへ

6.ブラウザでデフォルトで

this.x = 5; 

thisのポイントを windowないオブジェクトに添付されます方法でない限り。 #5と同じです。 XMLHttpRequestのようなメソッドを使用する場合、コンテキストはウィンドウのものであることに注意してください。

7.

with (window) { name = 'john'; } 

あなたがwithステートメントを使用し、すでにプロパティを持つオブジェクトを参照いけない場合は、グローバル変数が定義されています。一般的にはwithキーワードを使用しないようにしてください。

結論:個人的に

、私は無名関数のスコープで私のコードを続けるだろう、と私はする必要があるときだけ明示的にグローバルを宣言します。上記で

(function() { 

    var governor = 'Schwarzenegger', 
     state = 'California'; 

    window.president = 'Obama'; 
})(); 

、私はgovernorstate変数を定義し、彼らは私の関数に対してローカルです。グローバル変数としてpresidentを明示的に定義したいと思います。このように、グローバル変数として定義した変数については混乱しません。なぜなら、それらに明示的に接頭辞window.が付加されているからです。

3

(あなたはどこでもそれを見えるようにしなければならなかった場合は、グローバルスコープで)あなたは、ページの先頭にその変数を置くことができますが、私は二つのこと

1を示唆して)あなたはスクリプトブロックを開く必要があるため、避けますスクリプトがレンダリングをブロックするので、あなたのページの本文の中にそれを宣言します。だから、簡単なVARを作成していますが、グローバルスコープを汚染しないように、これは良い練習が順序である

<script> 
var YOUR_APP_NS = {}; 
YOUR_APP_NS.yourvar = .... 
</script> 

識別子衝突の危険性を減らすように、代わりに名前空間を使用するだけで</head>

2)を回避する前にそれを置きます。あなたはこのようにいくつかのプロパティpublic varが必要な場合は、単に

YOUR_APP_NS.yourvar1 = .... 
YOUR_APP_NS.yourvar2 = .... 
YOUR_APP_NS.yourvarN = .... 

を書くことができますが、グローバルvarがまだ1

です
関連する問題