tl;dr改行により、2 番目の関数で「未定義」が発生しています。JavaScript は多くの場合セミコロンを必要とせず、特定のコンテキストでセミコロンを想定しています (自動セミコロン挿入)。
場合によっては、この ASI 問題を回避するため、および美的理由から、いわゆるgrouping operatorを使用します。たとえば、Hoquetテンプレート DSL (配列を s 式として HTML にコンパイルする) では、HTML 構造を明確に示すように配列をグループ化するのが好きです。
return (
["ul"
, ["li"
, ["span", {class: "name"}, this.name]
, ["span", {id: "x"}, "x"]
]
]
);
これは、私にとっては、
return [
"ul",
[
"li",
["span", {class: "name"}, this.name],
["span", {id: "x"}, "x"]
]
];
そして、それらは同じ数の行になります。しかし、それは美学の問題です。
グループ化演算子は、その中にある式を評価するだけです。これは、通常は関数宣言を式に変換する必要がある [すぐに呼び出される関数式]でよく見られます。これにより、すぐに呼び出すことができます (したがって、名前が付けられます)。ただし、おそらくあまり知られていないグループ化演算子の機能は、コンマ区切りの式のリストも使用できることです。
function() {
return (
doSideEffects(),
console.log("this is the second side effect"),
1 + 1
);
}
この場合、これらの各式を評価し、最後の式 (1 + 1) のみを返します。