質問: function(){ }; ``` 例えば、function文最後にセミコロンを付けては駄目でしょうか? ``` function hoge(){ }; ``` ・function文にセミコロンを付けるのは文法上駄目? ・それとも、省略可能なだけで、付けても良い? ・「文」と「式」の違いに、「セミコロン有無」は関係あるでしょうか? ・「式」以外は、セミコロンを付けては駄目など...
回答: JavaScriptのセミコロンは**文の区切り**を明示的に示すものですが、仮に文の境に`;`を大量に並べて`;;;;;;;;;;;;`のようにしたところで動作に支障はないはずです。 function文でセミコロンを付けるのも問題はないでしょう。 ``` function showAlert (mess) { alert(mess); }; showAlert ("Hello!"); ``` 逆にいわゆるfunction式何故セミコロンがいるか。 ``` show = function (mess) { alert(mess) } (function(m){show(m)})("foo") ``` まずこのコードは上手く動作しません。(エラーが出るでしょう) ダイアログは表示されますが、表示されるのは即時関数のように書いた二つ目の関数の内容です。 これは ``` function (mess) { alert(mess) } (function(m){show(m)}) ``` が一つの即時関数と認識されるためです。 適切にセミコロンを入れればそのようなことはおこりません。 関数リテラル(function式)が式の一部なのに対し関数ブロック(function文)はそれ自体がブロックであるためこのようなことは起こりません。