aboutsummaryrefslogtreecommitdiff
path: root/files/ja/web/javascript/reference/statements/block/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'files/ja/web/javascript/reference/statements/block/index.html')
-rw-r--r--files/ja/web/javascript/reference/statements/block/index.html118
1 files changed, 118 insertions, 0 deletions
diff --git a/files/ja/web/javascript/reference/statements/block/index.html b/files/ja/web/javascript/reference/statements/block/index.html
new file mode 100644
index 0000000000..ea2b87acb2
--- /dev/null
+++ b/files/ja/web/javascript/reference/statements/block/index.html
@@ -0,0 +1,118 @@
+---
+title: ブロック
+slug: Web/JavaScript/Reference/Statements/block
+tags:
+ - JavaScript
+ - Language feature
+ - Reference
+ - Statement
+ - 文
+ - 言語機能
+translation_of: Web/JavaScript/Reference/Statements/block
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<p><strong>ブロック文</strong> (他の言語では <strong>複合文</strong> とも呼ばれる) は 0 個以上の文をグループ化するのに使われます。ブロックは中括弧 (「波括弧」) の組で区切られ、場合によっては{{jsxref("Statements/label", "ラベル", "", 1)}}が付くことがあります。</p>
+
+<div>{{EmbedInteractiveExample("pages/js/statement-block.html", "taller")}}</div>
+
+<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、<a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div>
+
+<h2 id="Syntax" name="Syntax">構文</h2>
+
+<h3 id="Block_Statement" name="Block_Statement">ブロック文</h3>
+
+<pre class="syntaxbox notranslate">{
+ <em>StatementList</em>
+}
+</pre>
+
+<h3 id="Labelled_Block_Statement" name="Labelled_Block_Statement">ラベル付きブロック文</h3>
+
+<pre class="syntaxbox notranslate"><em>LabelIdentifier</em>: {
+ <em>StatementList</em>
+}
+</pre>
+
+<dl>
+ <dt><code>StatementList</code></dt>
+ <dd>ブロック文の中でグループ化される文。</dd>
+ <dt><code>LabelIdentifier</code></dt>
+ <dd>省略可能な{{jsxref("Statements/label", "ラベル", "", 1)}}で、視覚的な識別のため、または {{jsxref("Statements/break", "break")}} のターゲットとして使われます。</dd>
+</dl>
+
+<h2 id="Description" name="Description">解説</h2>
+
+<p>ブロック文は、他の言語ではよく<strong>複合文</strong>と呼ばれます。これは複数の文を JavaScript からみて1つの文にまとめるために使用します。ブロック内に複数の文をまとめることは、JavaScript ではよく行われることです。反対の動作は<a href="/en-US/docs/Web/JavaScript/Reference/Statements/Empty">空文</a>を使用することで実現でき、これは1つの文が必要な場所に文を置かずにおくことができます。</p>
+
+<p>ブロックは、{{jsxref("Statements/if...else", "if...else")}} や {{jsxref("Statements/for", "for")}} 文との組み合わせでよく使用されます。</p>
+
+<h2 id="Examples" name="Examples">例</h2>
+
+<h3 id="Block_scoping_rules_with_var_or_function_declaration_in_non-strict_mode" name="Block_scoping_rules_with_var_or_function_declaration_in_non-strict_mode">非厳格モード時の var または関数定義のブロックスコープの規則</h3>
+
+<p>非厳格モードでは、<code>var</code> の宣言や、<a href="/ja/docs/Web/JavaScript/Reference/Statements/function">関数宣言</a>で作成された変数は、ブロックスコープを<strong>持ちません</strong>。ブロック内で導入された変数は、それを含んでいる関数またはスクリプトがスコープとなり、変数を設定した効果は、そのブロック自体を超えて持続します。言い換えれば、ブロック文はスコープをもたらしません。例えば、</p>
+
+<pre class="brush: js example-bad notranslate">var x = 1;
+{
+ var x = 2;
+}
+console.log(x); // 2 が出力されます
+</pre>
+
+<p>これが 2 を出力するのは、ブロックの中の <code>var x</code> 文がブロックより前と同じスコープを持つからです。</p>
+
+<p>非厳格モードでは、ブロック内の関数定義は奇妙な動きをします。使用しないでください。</p>
+
+<h3 id="Block_scoping_rules_with_let_const_or_function_declaration_in_strict_mode" name="Block_scoping_rules_with_let_const_or_function_declaration_in_strict_mode">厳格モード時の let、const、関数宣言のブロックスコープの規則</h3>
+
+<p>対照的に、{{jsxref("Statements/let", "let")}} と {{jsxref("Statements/const", "const")}} で宣言された識別子は、ブロックスコープを<strong>持ち</strong>ます。</p>
+
+<pre class="brush: js notranslate">let x = 1;
+{
+ let x = 2;
+}
+console.log(x); // 1 が出力されます</pre>
+
+<p>この <code>x = 2</code> は、それが定義されたブロックのスコープに制限されています。</p>
+
+<p>同じことが <code>const</code> にも言えます。</p>
+
+<pre class="brush: js notranslate">const c = 1;
+{
+ const c = 2;
+}
+console.log(c); // 1 が出力され、SyntaxError は発生しない...</pre>
+
+<p>ブロックスコープを持つ <code>const c = 2</code> は、ブロック内で固有に宣言することができるため、<code>SyntaxError: Identifier 'c' has already been declared</code> を発生させ<em>ない</em>ことに注意してください。</p>
+
+<p><a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">厳格モード</a>は ES2015 に導入され、ブロック内の関数がそのブロックのスコープを持ちます。ES2015 より前では、ブロックレベルの関数は厳格モードで禁止されていました。</p>
+
+<h2 id="Specifications" name="Specifications">仕様</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">仕様書</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-block', 'Block statement')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2>
+
+<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、<a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div>
+
+<p>{{Compat("javascript.statements.block")}}</p>
+
+<h2 id="See_also" name="See_also">関連情報</h2>
+
+<ul>
+ <li>{{jsxref("Statements/while", "while")}}</li>
+ <li>{{jsxref("Statements/if...else", "if...else")}}</li>
+ <li>{{jsxref("Statements/let", "let")}}</li>
+</ul>