JavaScript / function文でセミコロン

投稿者: Anonymous

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

//function文
function hoge(){
}

//function式
var hoge = 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文)はそれ自体がブロックであるためこのようなことは起こりません。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *