JavaScript ／ function文でセミコロン


JavaScript で、セミコロンの有無について教えてください。  
(付けては駄目なケースを知りたい)

[code]

    //function文
    function hoge(){
    }
    
    //function式
    var hoge = function(){
    };
    
[/code]

例えば、function文最後にセミコロンを付けては駄目でしょうか？

[code]

    function hoge(){
    };
    
[/code]

・function文にセミコロンを付けるのは文法上駄目？  
・それとも、省略可能なだけで、付けても良い？

・「文」と「式」の違いに、「セミコロン有無」は関係あるでしょうか？  
・「式」以外は、セミコロンを付けては駄目など…




JavaScriptのセミコロンは **文の区切り**
を明示的に示すものですが、仮に文の境に`;`を大量に並べて`;;;;;;;;;;;;`のようにしたところで動作に支障はないはずです。

function文でセミコロンを付けるのも問題はないでしょう。

[code]

    function showAlert (mess) {
      alert(mess);
    };
    showAlert ("Hello!");
    
[/code]

逆にいわゆるfunction式何故セミコロンがいるか。

[code]

    show = function (mess) {
      alert(mess)
    }
    (function(m){show(m)})("foo")
    
[/code]

まずこのコードは上手く動作しません。(エラーが出るでしょう)

ダイアログは表示されますが、表示されるのは即時関数のように書いた二つ目の関数の内容です。

これは

[code]

    function (mess) {
      alert(mess)
    }
    (function(m){show(m)})
    
[/code]

が一つの即時関数と認識されるためです。

適切にセミコロンを入れればそのようなことはおこりません。

関数リテラル(function式)が式の一部なのに対し関数ブロック(function文)はそれ自体がブロックであるためこのようなことは起こりません。




JavaScriptのセミコロンは **文の区切り**
を明示的に示すものですが、仮に文の境に`;`を大量に並べて`;;;;;;;;;;;;`のようにしたところで動作に支障はないはずです。

function文でセミコロンを付けるのも問題はないでしょう。

[code]

    function showAlert (mess) {
      alert(mess);
    };
    showAlert ("Hello!");
    
[/code]

逆にいわゆるfunction式何故セミコロンがいるか。

[code]

    show = function (mess) {
      alert(mess)
    }
    (function(m){show(m)})("foo")
    
[/code]

まずこのコードは上手く動作しません。(エラーが出るでしょう)

ダイアログは表示されますが、表示されるのは即時関数のように書いた二つ目の関数の内容です。

これは

[code]

    function (mess) {
      alert(mess)
    }
    (function(m){show(m)})
    
[/code]

が一つの即時関数と認識されるためです。

適切にセミコロンを入れればそのようなことはおこりません。

関数リテラル(function式)が式の一部なのに対し関数ブロック(function文)はそれ自体がブロックであるためこのようなことは起こりません。

