回答:
後のセミコロン関数の宣言がされている必要はありません。
aの文法は、次のFunctionDeclaration
ように仕様で説明されています。
function Identifier ( FormalParameterListopt ) { FunctionBody }
文法的にセミコロンは必要ありませんが、なぜだろうか。
セミコロンはステートメントを互いに分離するためのもので、a FunctionDeclaration
はステートメントではありません。
FunctionDeclarations
コードが実行に入る前に評価されます。巻き上げは、この動作を説明するために使用される一般的な言葉です。
「関数宣言」と「関数ステートメント」という用語は、ECMAScript仕様に記述されている関数ステートメントがないため、しばしば誤って交換可能に使用されますが、文法に関数ステートメントを含むいくつかの実装、特にMozillaがありますが、これも非標準です。
ただし、次のようにFunctionExpressions
、セミコロンを使用する場合は常に推奨されます。
var myFn = function () {
//...
};
(function () {
//...
})();
上記の例の最初の関数の後のセミコロンを省略すると、完全に望ましくない結果が得られます。
var myFn = function () {
alert("Surprise!");
} // <-- No semicolon!
(function () {
//...
})();
2番目の括弧を囲む括弧Arguments
は関数呼び出しのと解釈されるため、最初の関数はすぐに実行されます。
推奨講義:
FunctionDeclaration
vsの詳細FunctionExpression
)私はそれらを変数としての関数宣言の後に使用します:
var f = function() { ... };
しかし、古典的なスタイルの定義の後ではありません:
function f() {
...
}
JS Lintは事実上の規則であり、関数本体の後にセミコロンはありません。「セミコロン」を参照してください。
本当にあなたの好み次第です。私はJava、C ++、C#などに慣れているため、コードの行をセミコロンで終了するのが好きなので、JavaScriptでのコーディングに同じ標準を使用します。
通常、関数の宣言はセミコロンで終了しませんが、それは私の好みです。
ブラウザーはどちらの方法でもそれを実行しますが、多分いつかはこれを管理するいくつかのより厳しい標準を思い付くでしょう。
私が書くコードの例:
function handleClickEvent(e)
{
// comment
var something = true; // line of code
if (something) // code block
{
doSomething(); // function call
}
}
それは実際には慣習や一貫性の問題以上のものです。
すべてのステートメントの後にセミコロンを配置しないと、内部パーサーが遅くなります。これは、ステートメントの終わりがどこにあるのかを理解する必要があるためです。私はあなたがそれを明確に確認するためにあなたにいくつかの便利な数字があったらいいのですが、多分あなたはそれを自分でググることができます。:)
また、コードを圧縮または縮小する場合、セミコロンがないと、空白がすべてなくなるため、スクリプトの縮小版が意図したとおりに実行されない可能性があります。
関数の後にセミコロンを使用する必要がない場合でも、プログラムでエラーが発生することはありません。ただし、コードを縮小する場合は、関数の後にセミコロンを使用することをお勧めします。たとえば、次のようなコードがあるとします
//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(){};