回答編集履歴
3
式は単体では動作せず、文または宣言の一部としてしか使用できない
answer
CHANGED
@@ -92,7 +92,7 @@
|
|
92
92
|
そして、重要な違いは
|
93
93
|
|
94
94
|
- 宣言と文は単体で動作する
|
95
|
-
- **式は単体では動作せず、文または
|
95
|
+
- **式は単体では動作せず、文または宣言の一部としてしか使用できない**
|
96
96
|
|
97
97
|
という性質にあり、jsprimmer上では、それを
|
98
98
|
|
2
[参考] function キーワードで始まらないコード
answer
CHANGED
@@ -157,4 +157,37 @@
|
|
157
157
|
- `function` キーワードで始められるのは関数宣言のみ
|
158
158
|
- 間数式を格納している文または宣言(※関数宣言を除く)は `function` キーワードで始める事は出来ない
|
159
159
|
|
160
|
+
### [参考] function キーワードで始まらないコード
|
161
|
+
|
162
|
+
「名前のない即時関数」を書く場合を想定すると、function キーワードの違いが分かります。
|
163
|
+
下記コードはGoogle Chromeで実行した結果ですが、
|
164
|
+
|
165
|
+
```JavaScript
|
166
|
+
function(){} // SyntaxError: Function statements require a function name
|
167
|
+
```
|
168
|
+
|
169
|
+
functionキーワードで始められるのは関数宣言のみの為、JavaScriptエンジンはこのコードを関数宣言として扱おうとしますが、**名前がない関数宣言**が記述されている為、SyntaxError(文法エラー)を返しています。
|
170
|
+
(※前述の通り、関数宣言は文ではない為、エラーメッセージ内の `"Function statements"` は間違いです)
|
171
|
+
|
172
|
+
`()` で括って、**functionキーワードで始まらない記述にすれば**、エラーは発生しません。
|
173
|
+
|
174
|
+
```JavaScript
|
175
|
+
(function(){}); // エラーにならない
|
176
|
+
```
|
177
|
+
|
178
|
+
`();` を末尾につけて、実行すれば、よく見る即時関数の形式になります。
|
179
|
+
|
180
|
+
```JavaScript
|
181
|
+
(function(){
|
182
|
+
console.log('Hello, World!');
|
183
|
+
})();
|
184
|
+
|
185
|
+
(function(){
|
186
|
+
console.log('Hello, JavaScript!');
|
187
|
+
}());
|
188
|
+
```
|
189
|
+
|
190
|
+
- `function` キーワードで始まっていないので、このコードは「関数宣言(FunctionDeclaration)」ではありません
|
191
|
+
- `function` キーワードで始まっていないので、このコードは「式文(ExpressionStatement)」です
|
192
|
+
|
160
193
|
Re: tanakashouzoux さん
|
1
宣言(※関数宣言を除く)
answer
CHANGED
@@ -155,6 +155,6 @@
|
|
155
155
|
更に要約すると、次のようになります。
|
156
156
|
|
157
157
|
- `function` キーワードで始められるのは関数宣言のみ
|
158
|
-
- 間数式を格納している文または宣言は `function` キーワードで始める事は出来ない
|
158
|
+
- 間数式を格納している文または宣言(※関数宣言を除く)は `function` キーワードで始める事は出来ない
|
159
159
|
|
160
160
|
Re: tanakashouzoux さん
|