web-dev-qa-db-ja.com

javascriptのすべての関数の後にセミコロンを使用する必要があるのはなぜですか?

JavaScriptの関数の後にセミコロンが含まれる開発者とそうでない開発者がいるのを見てきました。どちらがベストプラクティスですか?

function weLikeSemiColons(arg) {
   // bunch of code
};

または

function unnecessary(arg) {
  // bunch of code
}
275
macca1

関数宣言の後のセミコロンは不要です

FunctionDeclarationの文法は 仕様 で次のように記述されています。

function Identifier ( FormalParameterListopt ) { FunctionBody }

文法的に必要なセミコロンはありませんが、なぜだろうか?

セミコロンはステートメントを互いに分離する役割を果たし、FunctionDeclarationステートメントではありません。

FunctionDeclarationsは、コードが実行に入る前に評価されます、 巻き上げ共通語ですこの動作を説明するために使用されます。

「関数宣言」と「関数ステートメント」という用語は、ECMAScript仕様に記述された関数ステートメントがないため、しばしば誤って交換可能に使用されますが、文法、特にMozillaに関数ステートメントを含むいくつかの実装があります。非標準です。

ただし、FunctionExpressionsを使用する場合は常にセミコロンをお勧めします。例:

var myFn = function () {
  //...
};

(function () {
  //...
})();

上記の例の最初の関数の後にセミコロンを省略すると、まったく望ましくない結果が得られます。

var myFn = function () {
  alert("Surprise!");
} // <-- No semicolon!

(function () {
  //...
})();

最初の関数は、2番目の関数を囲む括弧が関数呼び出しのArgumentsとして解釈されるため、すぐに実行されます。

推奨講義:

418
CMS

Function-as-variable宣言の後にそれらを使用します。

var f = function() { ... };

しかし、古典的なスタイルの定義の後ではありません:

function f() {
    ...
}
38
Gabe Moothart

JS Lint は事実上の慣習であり、関数本体の後にセミコロンはありません。 "セミコロン"セクションを参照してください。

20
David Hedlund

一貫性を保ってください!これらは必要ありませんが、ほとんどの縮小手法はセミコロンに依存しているため、個人的に使用します(たとえば、 Packer )。

7
Josh Stodola

本当にあなたの好みに依存します。 Java、C++、C#などに慣れているため、コード行をセミコロンで終了するのが好きです。そのため、JavaScriptのコーディングには同じ標準を使用しています。

私は通常、セミコロンで関数宣言を終了しませんが、それは私の好みです。

ブラウザはどちらの方法でも実行しますが、いつかはこれを管理するより厳しい標準が出てくるかもしれません。

私が書くコードの例:

function handleClickEvent(e)
{
     // comment
     var something = true;  // line of code
     if (something)  // code block
     {
        doSomething();  // function call
     }
}
5
regex

実際には、慣習や一貫性の問題以上のものです。

notステートメントの最後にセミコロンを配置すると、ステートメントの終わりがどこにあるかを把握する必要があるため、内部パーサーの速度が低下します。あなたがそれを積極的に確認するための便利な数字があればいいのですが、自分でグーグルで検索できるかもしれません。 :)

また、コードを圧縮または縮小する場合、セミコロンが不足していると、すべての空白がなくなるため、スクリプトの縮小バージョンが必要な処理を実行できなくなる可能性があります。

3
Mason

スクリプトを縮小したとき、等号で始まる関数にはセミコロンを使用する必要があることに気付きました。関数をvarとして定義する場合、はい、セミコロンを使用する必要があります。

セミコロンが必要

var x = function(){};
var x = new function(){};
this.x = function(){};

セミコロンは不要

function x(){}
1
senera

SIMPLE:

関数の中括弧の後にセミコロン;を残すことをお勧めします。彼らは長年にわたってベストプラクティスと考えられてきました。

常に使用することの利点の1つは、JavaScriptを縮小したい場合です。

Javascriptを縮小すると、ファイルサイズが少し小さくなります。

ただし、上記のベストプラクティスと回答については、関数タグの後に使用することはお勧めしません。

セミコロンを使用せず、縮小したい場合(多くの開発者が自分のサイトが多くのJavaScriptを提供している場合にやりたいように)、あらゆる種類のエラー/警告を取得できます。

0
Shaze

関数の後のセミコロンは、それを使用する必要がないかどうかにかかわらず、プログラムでエラーを引き起こしません。ただし、コードを縮小する場合は、関数の後にセミコロンを使用することをお勧めします。たとえば、次のようなコードがあるとします

//file one
var one=1;
var two=2;
function tryOne(){}
function trytwo(){}

そして

//file two
var one=1;
var two=2;
function tryOne(){};
function trytwo(){};

両方を縮小すると、出力として次のものが得られます

コメントは単なる例示にすぎないことに注意してください

//file one
var one=1;var two=2;function tryOne(){}
function trytwo(){}

そして

//file two
var one=1;var two=2;function tryOne(){};function trytwo(){};
0
DilanTsasi