2011-01-26 6 views

答えて

4

variable_name = 5は常に二つの文は基本的に同じである(ブラウザでwindowです)グローバルオブジェクト

variable_nameを置きます。しかし、あなたが関数コンテキストにいる場合、varは、この変数が現在のコンテキスト内でのみ宣言されていることを確認します。例えばので

function foobar() { 
    bar = 55; 
} 

foobar(); 

window.bar === 55 // true 

ベター:

function foobar() { 
    var bar = 55; 
} 

window.bar === 55 // false 

結論:機能のコンテキスト内で常に使用var。これにより、変数を使用してグローバルオブジェクトをクローバー/オーバーライドすることを回避します。

+0

ブラウザ環境内のグローバルオブジェクトとしての 'window'に言及する場合+1。 – alex

+0

関数がこのような変数を宣言している場合、function(typ){var typ;}これを行う必要はありますか?グローバルオブジェクトをオーバーライドするのを避けるために... – theHack

+1

@Afrig:いいえ。 'Activationオブジェクト'と呼ばれるスウィッチは、渡されたすべての引数を処理します。それはまだ関数のコンテキストでのみ利用可能です。 – jAndy

0

var keywordは、変数のスコープを現在の関数に制限します。それを離れると、グローバルになります。 Globals are badshould be avoidedは競合条件とスクリプトが互いに干渉する主要な原因です。

-8

違いはありません - 2番目の変数(x = 5;)では変数がまだ存在しない場合は自動的に宣言されます。

しかし、私は常に最初のオプションを使用します。あなたはglobal context(=ではない関数コンテキスト)にある場合

+1

最も確かに*行います*違いがあります。 '関数a(){var x = 1; } x = 0; a(); alert(x.toString()); '。 'var'を取り除いて、結果が変わらないかどうか確認してください。 – cHao

0

x=5は、この変数(実行後)がグローバルになり、コード内の他の部分(および他のjavascriptによっても)からアクセスできることを意味します。

var x=5いる間だけ、それが上で宣言されたブロックにはよく知られて、(それはだ子孫)x=5がグローバルになりますが、この行が実行された場合にのみ、それがグローバルになることを

注意! これを関数の中に置くと、その関数が呼び出された後に初めてグローバルになります(初めて)。

関連する問題