JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptのブロックステートメントとは?構文とスコープの仕組みをわかりやすく解説

ブロックステートメント(block statement)は、0個以上の文をひとまとめにグループ化するための構文です。中括弧 { } で囲まれた部分がブロックとなり、複数の処理をひとつのまとまりとして扱えます。JavaScript以外のプログラミング言語では、これと同じものは「複合文(compound statement)」と呼ばれることが一般的です。

基本構文

ブロックステートメントの書き方は非常にシンプルで、次のように中括弧の中に実行したい文を記述します。

{
  // 実行したい文をここに記述
}

ブロックと変数のスコープ

重要なポイントとして、var を使って宣言された変数はブロックスコープを持たないという点が挙げられます。つまり、ブロック内で var で宣言した変数であっても、そのスコープはブロックではなく「それを含む関数全体」になります。

次の例を見てみましょう。

var a = 20;
{
  var b = 40;
}
// ブロックの外からでもアクセスできる
document.write(b); // 40

このコードでは、変数 b はブロックの内側で宣言されていますが、ブロックの外側からでも参照できてしまいます。これは var の宣言がブロックレベルではなく関数レベルで扱われるためです。

さらに、同じ名前の変数をブロック内外で宣言した場合も挙動に注意が必要です。

var a = 20;
{
  var a = 40;
}
// どちらも同じ変数として扱われる
document.write(a); // 40

この例では、ブロック内の var a = 40; は新しい変数を作るのではなく、ブロックの外で宣言済みの a と同一の変数として扱われます。そのため、出力結果は 40 となります。

let・constとの違い

ES6(ECMAScript 2015)以降では、letconst を使うことで、ブロックごとのスコープ(ブロックスコープ)を実現できます。意図しない変数の上書きやスコープ漏れを防ぎたい場合は、var の代わりに letconst を使うのが現代のJavaScriptにおけるベストプラクティスです。

  1. JavaScriptのブロックスコープとは?letとconstによる変数のスコープをわかりやすく解説

    ブロックスコープとは、2つの波括弧 { } で囲まれた領域のことを指します。この領域は、ループ処理、if文、switch文などの内部に存在します。 ES2015(ES6)で導入された let と const を使うことで、そのブロック内でのみアクセスできる「ブロックスコープ変数」を作成できます。従来の var は関数スコープであり、ブロックの外からでもアクセスできてしまうため、意図しないバグの原因になることがありました。let や const を使えば、変数の有効範囲を明確に制限できます。 ブロックスコープの特徴 ブロック外からのアクセス不可: ブロック内で宣言した変数は、ブロックの外から参

  2. JavaScriptのwithステートメントとは?用途と使い方をわかりやすく解説

    JavaScriptのwithステートメントは、特定のプロパティに対してデフォルトのオブジェクトを指定し、冗長になりがちなオブジェクト参照の記述を省略するための構文です。withブロック内で指定したオブジェクトは、スコープチェーンの先頭に追加されるため、そのプロパティ名だけで直接アクセスできるようになります。 基本的な動作 通常、オブジェクトのプロパティにアクセスするには、毎回オブジェクト名を明示する必要があります。しかし、withステートメントを使えば、以下のようにコードを簡潔に書けます。 オブジェクト名の繰り返し記述を省略できる 同じオブジェクトの複数のプロパティへ短くアクセスできる 指