2017-04-25 5 views
0

関数スコープは20年間私にとって完璧でした。今私はどこでも、varの代わりにletconstを使うべきだと私は読んでいます。これは主に新しい機能だからだと思います。ブロックスコープを好む理由は何ですか?なぜ関数スコープの代わりにブロックスコープを使用する必要がありますか?

+1

JSは、他のすべての言語(少なくとも有名なもの)が尊重したブロックスコープを尊重しないという理由で、長い間批判されていたためです。今やJSは多くのギャップを埋めることによってこれらの言語に向かっています。 –

+2

あなたがそうする正当な理由がない限り、あなたはしないでください。 * var *を引き続き使用する理由の1つは、後方互換性があることです。 * const *と* let *はあなたのコードを実行する環境を制限することなく、*厳密なモード*(下位互換性もあります)と同様の利点を得ることができます。 – RobG

+0

ここでは、letとconstを使用する理由を読むことができます。「可変ホイスト」についてです。 http://stackoverflow.com/questions/3725546/variable-hoisting –

答えて

6

constは、固定バインディングであるという明らかな利点があります。 letには一時的な不感帯があり、同じスコープ内で識別子を再宣言することは禁じられているので、特定の間違いを防ぐのに役立ちます。

ブロックスコープが不要な場合は、varを引き続き使用しても問題ありません。

+0

Constは素晴らしいですが、いくつかの興味深いエラーにつながる可能性があります。たとえば、初期化の前に 'typeof'ブロック変数にエラーが発生するように頼むことができます... – Akxe

+4

@Akxe:なぜ変数がなければタイプを尋ねますか?まだ初期化されていますか?私は 'let'の場合に投げられたエラーを機能と見なします。 –

+0

ありがとう!私は 'var'を保ち、私は趣味のプロジェクトで' let'と 'const'を練習するでしょう。 – inf3rno

関連する問題