回答編集履歴
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 さん
         | 
