ブロック文 (他の言語では 複合文 とも呼ばれます) は 0 個以上の文をグループ化するのに使われます。ブロックは中括弧 (波括弧) の組で区切られます。
構文
{ statement_1; statement_2; ... statement_n; }
statement_1
,statement_2
,statement_n
- ブロック文の中でグループ化される文
説明
この文は通常、制御フロー文 (たとえば、if...else
、for
、while
など) とともに使われます。以下に例を示します。
while (x < 10) { x++; }
ブロック文はセミコロンで終わりませんので注意してください。
ブロック文は他の言語で、複合文 と呼ばれることがあります。これは JavaScript でひとつの文しか想定していない場所で、複数の文を使用できるようにします。複合的な文をブロックに収めることは、JavaScript で一般的な手法です。これと逆のことを、empty ステートメントを使用して実現できます。こちらは文が必要な場所に文を置かないことを可能にします。
ブロックスコープは存在しない
重要: var
で宣言した変数はブロックスコープを持ちません。ブロック内で導入された変数は、それを含む関数またはスクリプトがスコープとなり、変数を設定した効果は、そのブロック自体を超えて持続します。言い換えれば、ブロック文はスコープを導入しません。"スタンドアローン" なブロックは有効な構文ですが、JavaScript ではスタンドアローンなブロックを使わないほうがいいでしょう。なぜなら、もしブロックが C または Java のブロックのように何かすると思っているのなら、ブロックはあなたがそうすると思うようなことをしないからです。例えば:
var x = 1; { var x = 2; } alert(x); // 2 が出力されます
上記コードでは 2
が出力されます。なぜなら、条件文の中の文 var x
が条件文の前の文 var x
と同じスコープ内にあるからです。ブロックスコープを持つ C 言語や Java なら、同等なコードで 1
が出力されるでしょう。
ブロックスコープを使用したいなら、let
を検討してください。
仕様
ブラウザ実装状況
機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
基本サポート | (有) | (有) | (有) | (有) | (有) |
機能 | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
基本サポート | (有) | (有) | (有) | (有) | (有) | (有) |