関連ドキュメントは次のとおりです: https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/1.7#Block_scope_with_let_(Merge_into_let_Statement)
let ステートメントは、変数のローカル スコープを提供します。これは、コードの単一ブロックのレキシカル スコープで 0 個以上の変数をバインドすることによって機能します。それ以外の場合は、ブロック ステートメントとまったく同じです。特に、var を使用して let ステートメント内で宣言された変数のスコープは、let ステートメントの外で宣言された場合と同じであることに注意してください。そのような変数には、まだ関数スコープがあります。
ドキュメントではlet block
、let expression
(式のコンテキストの場合)、またはimplicit block
場合によってはそれを参照しています。
あなたの例では:
{ let a = 'I am declared inside a block'; }
console.log(a); // ReferenceError: a is not defined
a
スコープ外の値を取得することはできません。それがまさにスコープの目的です。ただし、これを行うことができます:
{ let a; // instantiated inside this block
a = 'I am assigned inside a block';
console.log(a); // returns the value of a
}