回答編集履歴

3

式は単体では動作せず、文または宣言の一部としてしか使用できない

2020/06/07 03:32

投稿

think49
think49

スコア18189

test CHANGED
@@ -186,7 +186,7 @@
186
186
 
187
187
  - 宣言と文は単体で動作する
188
188
 
189
- - **式は単体では動作せず、文またはの一部としてしか使用できない**
189
+ - **式は単体では動作せず、文または宣言の一部としてしか使用できない**
190
190
 
191
191
 
192
192
 

2

[参考] function キーワードで始まらないコード

2020/06/07 03:32

投稿

think49
think49

スコア18189

test CHANGED
@@ -316,4 +316,70 @@
316
316
 
317
317
 
318
318
 
319
+ ### [参考] function キーワードで始まらないコード
320
+
321
+
322
+
323
+ 「名前のない即時関数」を書く場合を想定すると、function キーワードの違いが分かります。
324
+
325
+ 下記コードはGoogle Chromeで実行した結果ですが、
326
+
327
+
328
+
329
+ ```JavaScript
330
+
331
+ function(){} // SyntaxError: Function statements require a function name
332
+
333
+ ```
334
+
335
+
336
+
337
+ functionキーワードで始められるのは関数宣言のみの為、JavaScriptエンジンはこのコードを関数宣言として扱おうとしますが、**名前がない関数宣言**が記述されている為、SyntaxError(文法エラー)を返しています。
338
+
339
+ (※前述の通り、関数宣言は文ではない為、エラーメッセージ内の `"Function statements"` は間違いです)
340
+
341
+
342
+
343
+ `()` で括って、**functionキーワードで始まらない記述にすれば**、エラーは発生しません。
344
+
345
+
346
+
347
+ ```JavaScript
348
+
349
+ (function(){}); // エラーにならない
350
+
351
+ ```
352
+
353
+
354
+
355
+ `();` を末尾につけて、実行すれば、よく見る即時関数の形式になります。
356
+
357
+
358
+
359
+ ```JavaScript
360
+
361
+ (function(){
362
+
363
+ console.log('Hello, World!');
364
+
365
+ })();
366
+
367
+
368
+
369
+ (function(){
370
+
371
+ console.log('Hello, JavaScript!');
372
+
373
+ }());
374
+
375
+ ```
376
+
377
+
378
+
379
+ - `function` キーワードで始まっていないので、このコードは「関数宣言(FunctionDeclaration)」ではありません
380
+
381
+ - `function` キーワードで始まっていないので、このコードは「式文(ExpressionStatement)」です
382
+
383
+
384
+
319
385
  Re: tanakashouzoux さん

1

宣言(※関数宣言を除く)

2020/06/06 11:28

投稿

think49
think49

スコア18189

test CHANGED
@@ -312,7 +312,7 @@
312
312
 
313
313
  - `function` キーワードで始められるのは関数宣言のみ
314
314
 
315
- - 間数式を格納している文または宣言は `function` キーワードで始める事は出来ない
315
+ - 間数式を格納している文または宣言(※関数宣言を除く)は `function` キーワードで始める事は出来ない
316
316
 
317
317
 
318
318