中括弧の位置によって結果が異なるのはなぜですか? 質問する

中括弧の位置によって結果が異なるのはなぜですか? 質問する

以下のコードスニペットは、この記事中括弧の配置を 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);
}

中括弧が と同じ行にある場合returntest()オブジェクトが返され、「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 スタイル ガイドセミコロンの挿入について言及しています。

javascript2 番目の例では、プロパティとその値を持つオブジェクト (中括弧で構築) を返します。"fantastic"これは実質的に次の例と同じです。

function test() {
    var myObject = new Object();
    myObject.javascript = "fantastic";
    return myObject;
}

おすすめ記事