Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

ブロック文 (他の言語では 複合文 とも呼ばれます) は 0 個以上の文をグループ化するのに使われます。ブロックは中括弧 (波括弧) の組で区切られます。

構文

{
  statement_1;
  statement_2;
  ...
  statement_n;
}
statement_1, statement_2, statement_n
ブロック文の中でグループ化される文

説明

この文は通常、制御フロー文 (たとえば、if...elseforwhile など) とともに使われます。以下に例を示します。

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 を検討してください。

仕様

仕様書 策定状況 コメント
ECMAScript 2017 Draft (ECMA-262)
Block statement の定義
ドラフト  
ECMAScript 2015 (6th Edition, ECMA-262)
Block statement の定義
標準  
ECMAScript 5.1 (ECMA-262)
Block statement の定義
標準  
ECMAScript 3rd Edition (ECMA-262)
Block statement の定義
標準  
ECMAScript 1st Edition (ECMA-262)
Block statement の定義
標準 最初期の定義。JavaScript 1.0 で実装。

ブラウザ実装状況

機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本サポート (有) (有) (有) (有) (有)
機能 Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本サポート (有) (有) (有) (有) (有) (有)

関連情報

ドキュメントのタグと貢献者

 このページの貢献者: YuichiNukiyama, yyss, teoli, ethertank, Nanto vi, Mgjbot, Shimono
 最終更新者: YuichiNukiyama,