2016-03-18 6 views
-3

JavaScriptで関数を実行するとき、私はコードブロックをデフォルトでセミコロンで終了しました。なぜなら、これは私がやったことだからです。 Javaからは当初は非正統であったが、シンタックスは構文である。JavaScriptでセミコロンを使用して関数を閉じます。必要?

function semiColon(args) { 
    // code block here 
}; 

または

function sloppyFunction(args) { 
    // code block here 
} 

最近、私は、開発者が機能した後、外にセミコロンを残したが、意図したコードはまだ正常に実行され、より多くのコードを見てきました。彼らは実際に必要なのですか?そうでない場合は、なぜそれらを含めるのが一般的な慣行ですか?彼らは別の目的を果たしていますか?

+1

関数*宣言*の後にセミコロンを置くのは非常にまれだと思います。なぜなら、それらはブロック式のように扱われるからです。 (正式な構文であるかどうかは分かりませんが、それは人々の扱い方です。)しかし、通常のステートメントの後には常にセミコロンを使用するべきです(** Javaの場合とまったく同じです**)。セミコロンの自動挿入(これは実際に依存することは意図されていません)では、いくつかのエッジケースを避けてください。 –

答えて

1

関数宣言にはセミコロンは必要ありませんが、セミコロンを置いても有害ではなく、冗長なempty statementです。

function semiColon(args) { 
    // code block here 
};;;; // 4 empty statements 

ほとんどの文はセミコロンが必要ですが、あなたはアウトセミコロンを残せば、それは警告で、Automatic Semi-Colon Insertionによってほとんどの場合、自動的に挿入されます。一般的には、ステートメントの後ろにセミコロンを追加するほうが簡単です。そうすれば、あなたとコードを扱う他の開発者は、そのような警告について心配する必要はありません。

このコードは正しいです:

function semiColon(args) { 
    // code block here 
} // No need for semi-colon 

var semiColon = function (args) { 
    // code block here 
}; // Semi-colon required here 

このコードが間違っているが、それでも通常動作しますに対し:

function semiColon(args) { 
    // code block here 
}; // Redundant unnecessary Empty Statement 

var semiColon = function (args) { 
    // code block here 
} // Semi-colon required here, 
// but ASI will sometimes insert it for you, depending on 
// the subsequent token 
+0

厳密に言えば、関数宣言はステートメントではありませんが、ほとんど現実的な違いはありません。 –

0

あなたは関数宣言の後にセミコロンを追加してはなりません。

  • StatementList

    • StatementListItem
    • StatementList
  • StatementListItem

    Javascript文法をチェックした後、理由

    • Statement
    • Declaration
  • Declaration

    • HoistableDeclaration
    • ClassDeclaration
    • LexicalDeclaration
  • HoistableDeclaration

    • FunctionDeclaration
    • GeneratorDeclaration

ここでは関数の文法生産です:

FunctionDeclaration → HoistableDeclaration → Declaration → StatementListItem → StatementList 

これは私の以前の反応がで間違っていることを証明しています(これは間違っているので、以前の編集を見る必要はありません! ;))。

function xx() {}構造だけではは特殊なケースで、どちらも - 厳密を話す - ステートメントまたは式を、ひいてはセミコロンで終了するませです。

構文の一部である場合に存在する式function()構文を使用している場合は、セミコロンを追加するだけで済みます(または、ASIはそれを処理したままにしておく必要があります)。別の表現の中

var foo = function() {}; 

または埋め込み:

(function() {})(); 
!function x() { ... }(); 

のいずれかのケースでは、あなたが最後にセミコロンを追加する必要があり、それあなたがそれを文の一部を持っているいずれかの必要があるのステートメントようにするには明らかに完全な声明の

一般的に言って、私はPythonのマントラあなたはASIは、そうでない場合は追加であろうと、セミコロンを追加することを躊躇ときに、それを追加し「明示的、暗黙的よりも優れている」のが好きです。

申し訳ありませんが私の答えの最初のバージョンでは、私は退屈としていくつかのPHPコードをデバッグします。 ☺

HTH

+1

*「ASIはここにセミコロンを追加します」*そうではありません。 ASIは、コードを他の方法で解析できない場合(およびいくつかの追加規則)にのみ実行されます。しかし、この特別なルールもあります:* "しかし、上記のルールには、さらに優先条件があります。セミコロンが空文として解析されると自動的にセミコロンが挿入されることはありません。したがって、ASIが常に行われたとしても、宣言の後にセミコロンを挿入しません。これは、空文であるためです。 –

+0

私はあなたの言うことに同意します。たとえあなたが間違っていても、 'function x(){...}'は_expression_であり、_statement_ではありません。したがって、末尾の ';'は式を文にし、空の文を追加しません。 – zmo

+0

私はあなたの編集を理解していますか分かりません。 'function x(){trueを返します。 } .name'は構文エラーです。 'function x(){...}'は関数宣言であり、式ではありません。 –

1

NO - function declarationsはJavaScriptで必要ではありません終了するセミコロンを使用。彼らはエラーをスローしませんが、無害ですが不要なコード行を終了するために複数のセミコロンを使用するのと同じです。余計なことに、彼らは貧弱な文体やプログラミングの練習とみなされます。

1つの例外は関数式です。

var my_function = function(a, b){ }; 

ここで、行を終了するにはセミコロンが必要です。

関連する問題