8191


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

[code]

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

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

[code]

    function hoge(){
    };
    
[/code]

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

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


CC BY-SA 3.0
2015-03-20T09:54:03.533
8189
2015-03-20T20:29:40.533
7886
question
javascript
JavaScript ／ 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文)はそれ自体がブロックであるためこのようなことは起こりません。


CC BY-SA 3.0
2015-03-20T10:58:51.097
8191
2015-03-20T10:58:51.097
2376
8189
answer


`if-else`、`for`、`while`、`switch`などのブロックを利用する制御構造の末尾にセミコロンは必要ありません。（しかし`do-
while`の末尾にはセミコロン付ける）

それ以外の式の区切りには、全てセミコロンが必要だとお考え下さい。

`function`の末尾にもセミコロンは必要ありませんが、`var func =
function(){};`のような、変数に関数を代入するような書き方をした場合には **演算子** を利用した **式**
になりますので、末尾にセミコロンが必要になります。

セミコロンを省略しても問題なく動作することはありますが、ブラウザの種類によっては動作しなくなることもございますので、セミコロンを省略するよりは、必要ない箇所にセミコロンがあるほうが、プログラムの動作的には安心です。（むかしセミコロンを省略したらChromeやSafariでは動作するのにIEでは動かなかったことがありました。）

しかし、個人的に以下のようなセミコロンが必要無い箇所にセミコロンが書いてあるコードを見つけたら、取り除きたいなあという気持ちになってしまいまいますので、周りの共同開発者の皆様と相談して決めていくのがよろしいかと思われます。

[code]

    if( home ){
      x = y + z;
    };  // ←ここ
    
[/code]

あまりコードの中で使われているのを見る機会が少ないですが、Javascriptにはループを一気に抜けたり進めたりすることが出来る **ラベル**
という制御構造も用意されており、ややこしいことにこのラベルにはコロンを利用してセミコロンは必要ありません。


CC BY-SA 3.0
2015-03-20T11:47:27.670
8194
2015-03-20T20:29:40.533
2015-03-20T20:29:40.533
8351
8351
8189
answer


文の後にはセミコロンは不要ですが付けても問題ありません。


CC BY-SA 3.0
2015-03-20T12:24:38.133
8195
2015-03-20T12:24:38.133
5721
8189
answer