以下のコードスニペットは、この記事中括弧の配置を 1 つ変更するだけで、異なる結果が生成されますか?
開き中括弧が{
新しい行にある場合、test()
が返されundefined
、アラートに「no - it broke: undefined」と表示されます。
function test()
{
return
{ /* <--- curly brace on new line */
javascript: "fantastic"
};
}
var r = test();
try {
alert(r.javascript); // does this work...?
} catch (e) {
alert('no - it broke: ' + typeof r);
}
中括弧が と同じ行にある場合return
、test()
オブジェクトが返され、「fantastic」が警告されます。
function test()
{
return { /* <---- curly brace on same line */
javascript: "fantastic"
};
}
var r = test();
try {
alert(r.javascript); // does this work...?
} catch (e) {
alert('no - it broke: ' + typeof r);
}
ベストアンサー1
これは JavaScript の落とし穴の 1 つです。つまり、自動セミコロン挿入です。セミコロンで終わらない行でも、文の終わりになる可能性がある場合は自動的に終了するため、最初の例は実質的に次のようになります。
function test()
{
return; // <- notice the inserted semicolon
{
javascript: "fantastic"
};
}
参照ダグラス・クロックフォードの JS スタイル ガイドセミコロンの挿入について言及しています。
javascript
2 番目の例では、プロパティとその値を持つオブジェクト (中括弧で構築) を返します。"fantastic"
これは実質的に次の例と同じです。
function test() {
var myObject = new Object();
myObject.javascript = "fantastic";
return myObject;
}