2017-01-17 6 views
0
let x = 10; 
if (true) { 
    console.log(x); 
    let x = 12; 

} 
console.log(x); 

出力:未知参照Error:xは定義されていません。変数がスコープ変数にアクセスする場合は変数を定義しません。

Q1。なぜそれはエラーを出すのですか?

Q2。上の例の最初のコンソールでx = 10にアクセスするには?

+0

A1は - var' 'とは異なり、' let'変数はA2に掲揚されていません - あなたはできません...エラーメッセージが表示され、Firefoxのメッセージは、このコードではほとんど明確である 'のReferenceErrorは:字句の宣言にアクセスすることはできません'x'を初期化する前に –

+0

letの中のletを取り除いて、そのwork's..Refer [変数を宣言するために "let"と "var"を使うことの違いは何ですか?](http://stackoverflow.com/questions/762011)/whats-the-difference-using-let-and-var-to-declare-a-variable) – prasanth

+0

あなたの 'if'ブロックの中の'どこか 'に 'let' definituonを置くことで、この変数をローカルにしましたそのブロック全体。ブロックの外側で設定された値を参照できるようにしたい場合は、 'x = 12 'の場合は' let'を先に置きます。しかし、それはもちろん元の変数 'x'をリセットします。 – cars10m

答えて

1

letがあなたが範囲が限定されている変数を宣言することができます。変数をグローバルに定義するvarキーワードとは異なり、またブロックスコープに関係なく関数全体に対してローカルに定義します。誰もが言及したもののように

0

letは範囲が限定されます。あなたがletを使用して変数を宣言した場合、変数は、最寄りの外側のブロックにスコープされます。つまり、同じコードブロック内でのみ使用できます。関数や別のブロックの外に宣言した場合、そのブロックは使用できません。

varを使用して変数を宣言した場合、変数は最も近い関数ブロックにスコープされます。つまり、関数はグローバルであるが制限があります。関数内では宣言された値を使用できませんそれを関数の中で定義することができます。それを再度宣言する必要はありません。より詳細な、について説明するため

、あなたはこれをチェックアウトすることができます:What's the difference between using "let" and "var" to declare a variable?

をだからあなたの質問に答えるために:あなたはletを使用し、それがifブロックの外側で宣言されましたので、それはエラーを与え、それ故にそれが定義されていません/ ifブロック用です。そのアクセスx = 10ようにするには、letの代わりにvarを使用しています。

関連する問題