- ベストアンサー
javascript関数宣言にセミコロンをつけてもよいの?
- javascriptの関数宣言について質問です。関数宣言にはセミコロンをつけてもよいのでしょうか?
- 関数宣言と名前付き関数、無名関数の違いについても説明します。
- 別の本では関数宣言にセミコロンが記述されている場合もあることが分かりました。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>あるjavascriptの本に関数宣言と名前付き関数、無名関数についてかいてありました。 >これらの違いは最後が;でおわっているかどうかとかいてありました。 理由と結果が逆で、間違ってますね。 セミコロンは関数式の後ろには必須(なケースがある)ですが, 関数宣言の後ろは(常に)省略可能です。 セミコロンの有無で何かを判断するのは話が逆。 関数式の後ろでも次の行の内容によってはセミコロンは省略可能です。 var a=function(){ return 1 } var b=123 は、OKです。 var a=function(){ return 1 } (function(){return 2})() はNGです。この場合、2行目末にセミコロン必須。無いと2行目と3行目がつながって var a=((function(){ return 1 })(function(){return 2}))() と書いたのと同じになって、文法的には正しく、関数呼び出し後、 var a=1() となり、実行時エラー。 var a=function(){ return function(){return 99} } (function(){return 2})() だとこの文ではエラーにならないのでさらにやっかい。 ここまでややこしくなくても、 var x var a=function(){ return 1 } (x=123) でもNG。括弧がだめです。 ということで、関数式で文が終わる場合は、必ずセミコロンを付けた方が良いです。 そもそも関数式が式の途中、例えば他の関数の引数になっている場合等は、当然ですがセミコロンは付けませんよね。 foo( function(){return 1;} ); とか。これを以てしてもその本の間違いは明らか。 なお、言うまでも無いですが「次の行の内容によっては行末のセミコロン省略可」は関数式で終わる文・式に限らずどんな文・式もです。 普通は文末・式末には付けておいた方が良いでしょうけど。 もちろん、「関数宣言だけつけず、それ以外の文・式は全部付ける」という方針でもいいと思いますが、「 } のあとは必ず付ける」も機械的ルールでわかりやすい。
お礼
そうなんですか! わかりました! 納得です! ありがとうございます!!