2016-05-11 6 views
1

宣言が唯一のブロック内で宣言することができる「聞かせて」私はこれらの行を持っています。括弧なしで正常に動作しますifエラー:私のプロジェクトで

'let' declarations can only be declared inside a block.

他のすべての単一の文:私は、次のエラーを得たしかし

if (text.length > 0) 
    let data = "Some value"; 

:私のコードは次のように見えただろう。このエラーが発生するのはなぜですか?

+1

あなたが使用したい理由は何ですか?このif文の外側には表示されません。 – jkordas

+0

@Andreyその答えはあまりにも技術的であり、そのような疑問がある場合は、この質問の代行としてマークする必要があります。 – SeinopSys

答えて

1

letによって宣言された変数は、定義されているブロックをスコープとして持つため、スコープを定義するには角括弧が必要です。

var a = 5; 
let(a = 6) console.log(a); // 6 
console.log(a); // 5 

注:表現LETブロックは、非標準のletの拡張機能であり、彼らのサポートが削除されていましょう あなたは1つの式だけに対してスコープを持つ変数を確立するみましょう使用することができます。

+0

'let(a = 6)console.log(a)'これは有効なJavaScriptシンタックスではありません。 – Ginden

+0

あなたはそれが非標準ですが、有効であることを意味します – Konst

+0

そうではありません。詳細については、[MDN非標準レットエクステンション - >レット式](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#let_expressions)を参照してください - この構文が提案されましたしかしそれは仕様から落とした。 – Ginden

2

'let'宣言はブロック内でのみ宣言できます。

実際には、letconstはブロックスコープであるため、このようなコードは役に立ちません。

if (foo) { 
    let bar = true; 
} 
bar // bar doesn't exist here; 

たとえあなたが合法であっても、それはうまくいかないので禁止されています。

+0

変数が役に立たない状況: 'let server = app.listen(() => console.log(server.address())) '。はい、これは機能します(単一行の 'if'で使用するまで)。 – Inkling

関連する問題