関数宣言の後に誰かがセミコロンを追加しましたが、誰かが追加しませんでした。関数宣言の後にセミコロンを追加するのは良い習慣ですか?
function test(o) {
}
function test(o) {
};
関数宣言の後に誰かがセミコロンを追加しましたが、誰かが追加しませんでした。関数宣言の後にセミコロンを追加するのは良い習慣ですか?
function test(o) {
}
function test(o) {
};
関数宣言には、その後にセミコロンを付ける必要はありません (また、付けるべきではありません)。
function test(o) {
}
ただし、以下の変数初期化子のように関数を式として記述する場合は、他のステートメントと同様に、ステートメントをセミコロンで終了する必要があります。
var a = function test(o) {
};
コンストラクターと宣言(ステートメント)と式の詳細を参照してください。
そこで実際に起こっているのは、関数の後に空のステートメントを追加していることです。
function test (o) { return o; };
次のように見える可能性があります。
var test = 0;;
その 2 番目のセミコロン自体はエラーではありません。ブラウザはそれを、まったく何も起こらなかったステートメントのように扱います。
ここで注意すべき点が 2 つあります。
これは、関数宣言と制御ブロック (for/if/while/switch/etc) にのみ適用されます。
関数宣言はスコープの最後で定義する必要があるため、次のような問題に遭遇することはありません。
function test () {}
(function (window, document, undefined) { /* do stuff */ }(window, document));
function test() {}(/*return value of closure*/);
ブラウザーは、どちらがエラーであるかを意味していると想定するためです。非常に見落としやすい非常に悪い厄介なエラーです。
しかし、それは問題ありません。なぜなら、関数宣言は return ステートメントの下に置くことができ、それでも問題なく機能するからです。
だからあなたが行きたかったとしても:
function doStuff () {
return (function () { /*process stuff*/ test(); }());
function test () {}
}
それはちょうどピーチでうまくいくでしょう。
セミコロンと関数宣言:
function test(o) {
// body
} // semicolon no
var test = function (o) {
// body
}; // semicolon yes
コードの質問の書式設定については、 JSLintを参照してください。
いいえ。
そのような関数を定義するとき、セミコロンは必要ありません。
ただし、次のような関数を定義すると:
var test = function (o) {
}
厳密には必要ではありませんが、特に関数を 1 行に配置する場合は、それらを使用することをお勧めします。
最初の方法は関数を定義しますが、2 番目の方法は関数を変数に代入するため、ステートメントになります。ほとんどのステートメントはセミコロンで区切られています。関数の定義は、多くの人が使用していないため、一般的な反例と見なすことができます。
ブラウザにとって、それは問題ではありません。セマンティクスの問題については、関数のプロトタイプを作成しているか、関数ステートメントを使用しているかだけが重要です。
function stuff(stuff) {
alert(stuff);
} //don't need a semicolon
Object.prototype.stuff = function(stuff) {
alert(stuff);
}; //need a semicolon
var stuff = function(stuff) {
alert(stuff);
}; //need a semicolon
関数の定義時にセミコロンは必要ありませんが、セミコロンを付けることも間違いではありません。
ただし、1つの例外として、関数ラッパーを使用してパラメーターを渡す場合は、間にセミコロンを追加する必要があります。例:
(function(v){alert(v)})('1');
(function(s){alert(s)})('0')
... Otherwise forget about them ...