質問するログイン新規登録

回答編集履歴

1

ネストする

2018/01/04 03:01

投稿

think49
think49

スコア18194

answer CHANGED
@@ -1,5 +1,39 @@
1
+ ### ブロック文 (BlockStatement)
2
+
3
+ - [13.2 Block - ECMAScript® 2017 Language Specification](http://www.ecma-international.org/ecma-262/8.0/#sec-block)
4
+
1
- JavaScript では「ブロック」と呼ばれる構文で Statement の一種です。
5
+ JavaScript では `{}` は「ブロック」と呼ばれる構文で Statement の一種です。
2
6
  if 文や for 文など、他の Statement の一部で Statement が要求される場所に使われることが多いですが、for 文の一部と受け取られがちで認知度が低いかもしれませんね。
3
7
  他に、**Label 文**に使ったり、**ブロックスコープ**を形成する為に使われることがあります。
4
8
 
9
+ ### ネストする
10
+
11
+ > ブロック文の中に文を入れることを「ネストする」というのは不適切でしょうか?
12
+
13
+ 「**同じ構文を入れ子にする**」ことをネストすると表現します。
14
+ 「ブロック文」と「文」は同じ構文ではないので、ネストとは表現しません。
15
+ ブロック文の中にブロック文が入れば、**ブロック文をネストしている**と表現して差し支えありませんが、
16
+
17
+ ```JavaScript
18
+ if (x === 1) {
19
+ const y = 1;
20
+
21
+ {
22
+ const z = 1;
23
+ }
24
+ }
25
+ ```
26
+
27
+ 先述の通り、if 文内のブロック文は認知されていないので、この説明で違和感を感じる人が多いかもしれません。
28
+
29
+ - [13.6 The if Statement - ECMAScript® 2017 Language Specification](http://www.ecma-international.org/ecma-262/8.0/#sec-if-statement)
30
+
31
+ > **Syntax**
32
+ >
33
+ > ```plain
34
+ > IfStatement[Yield, Await, Return]:
35
+ > if(Expression[+In, ?Yield, ?Await])Statement[?Yield, ?Await, ?Return]elseStatement[?Yield, ?Await, ?Return]
36
+ > if(Expression[+In, ?Yield, ?Await])Statement[?Yield, ?Await, ?Return]
37
+ > ```
38
+
5
39
  Re: GCP さん