1

whileJavaScript には、ブロック、ifブロック、ブロックなど、多くの種類のブロックがありforます。ES6 ではブロック スコープが導入されているため、「純粋にセマンティック」で「匿名」のブロックは理にかなっています。

{ let a = 'I am declared inside a block'; }
console.log(a); // ReferenceError: a is not defined

上記のタイプのブロック (スコーピングのみに使用) は何と呼ばれますか?

4

2 に答える 2

1

関連ドキュメントは次のとおりです: 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 blocklet 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
}
于 2013-07-10T16:20:01.680 に答える
0

それらはletブロックと呼ばれると思います。MDN によると、私は表面的には正しいようです:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/1.7#let_statement

letステートメントの下の「スコープ規則」セクションを読んでください。

于 2013-07-10T16:18:54.127 に答える