2017-12-07 13 views
0

varキーワードの有無にかかわらずjavascript変数を宣言することは可能です。JS:なぜ変数は `var`キーワードの有無にかかわらず宣言できますか?

var a = 100; // this works! 
    b = 200; // and this does too! 

初期化せずに変数を宣言することもできます。

しかし、varを持たない変数に対しては、なぜ同じことは当てはまりません。なぜなら、初期化せずに宣言するのはなぜですか?

var c; 
    d;  // causes a reference error to occur! 

なぜですか?

+0

これをお読みくださいhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var –

+0

@DanielTateありがとうございます! – Grateful

答えて

2

まず、あなたが目にしているのは、従来の動作です。宣言されていないシンボルへの代入は、伝統的に、グローバルシンボルを作成(宣言)し、与えられた値に設定する必要があることを暗に意味しました。したがってxが宣言されていない

x = 1; 

は、グローバルシンボルの暗黙のインスタンス化としました。

言及のように宣言されていないシンボルのは、:シンボルが宣言されていないですので

x; 

エラーです。現代のJavaScriptで

、及び「厳密」モードが原因

"use strict"; 

ステートメントの力である(またはので、他の影響の、Node.jsのコードの場合であってもよいように)、暗黙の作成グローバル・シンボルの誤りもまた誤りである。

一般的に、暗黙のグローバルシンボルのインスタンス化は悪い考えです。グローバルな名前空間がひどく汚染されているため、JavaScriptのグローバルシンボルはかなり問題になります。ありがたいことに、関数スコープ内にコードをラップして、ブラウザが奇妙なグローバル名を持つことを恐れることなく、シンボルの "安全な空間"を作成するのは簡単です。

+0

私はそれが好きです。それは私にとってもっと論理的なようです。 :) – Grateful

0

あなたはSOMEVARが存在していない場合は非strictモードのための非strictモード

var a = 100; // this works! 
     b = 200; // and this does too! 

で、SOMEVAR = someValueの、それを宣言し、SOMEVARにsomeValueのを割り当てますjavascriptのことを行うことができます。その場合には

var c; 
    d;  // causes a reference error to occur! 

行1:VaRのC。 - >宣言すると、それは有効な構文です。 行2:d; - >あなたはdにアクセスしますが、dは過小評価されています - >エラーが発生します! dはその行の前のどこかで定義されていると仮定しているので、エラーは発生しません!!

関連する問題