为什么结果因大括号放置而异?

Jus*_*arn 99 javascript syntax

为什么从本文中获取的代码片段会产生不同的结果,因为花括号的位置只有一个变化?

当开始大括号{在新行上时,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);
}
Run Code Online (Sandbox Code Playgroud)

当括号与同一行时return,test()返回一个对象,并提醒"神奇".

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);
}
Run Code Online (Sandbox Code Playgroud)

Res*_*uum 143

这是JavaScript的一个陷阱:自动分号插入.不以分号结尾但可能是语句结尾的行会自动终止,因此您的第一个示例看起来像这样:

function test()
{
  return; // <- notice the inserted semicolon
  { 
    javascript: "fantastic"
  };
}
Run Code Online (Sandbox Code Playgroud)

另请参阅Douglas Crockford的JS风格指南,其中提到了分号插入.

在第二个示例中,您返回一个对象(由花括号构建),其中包含属性javascript及其值"fantastic",实际上与此相同:

function test() {
    var myObject = new Object();
    myObject.javascript = "fantastic";
    return myObject;
}
Run Code Online (Sandbox Code Playgroud)

  • +1`javascript自动分号插入` (16认同)
  • 有趣的事实:在某些引擎上,您可以注释掉自动插入的分号 (4认同)
  • 由于这些怪癖,我在 10 年前对自己做出了承诺:远离网络!我祈祷互联网会消失……不幸的是它没有按计划进行,现在我也不得不与这些问题作斗争。业力是ab * tch :) (3认同)
  • 我见过一些人在 JavaScript 中坚决反对分号,我一直想知道他们如何利用不使用分号节省的额外时间。 (2认同)

Guf*_*ffa 7

Javascript在语句结尾处不需要分号,但缺点是它必须猜测分号的位置.大多数情况下这不是问题,但有时它会发明一个你不打算使用分号的分号.

我的博客文章中的一个例子(Javascript - 几乎不基于行):

如果您格式化代码如下:

function getAnswer() {
   var answer = 42;
   return
      answer;
}
Run Code Online (Sandbox Code Playgroud)

然后它被解释为这样:

function getAnswer() {
  var answer = 42;
  return;
  answer;
}
Run Code Online (Sandbox Code Playgroud)

return语句采用无参数形式,参数成为它自己的声明.

你的代码也是如此.该功能被解释为:

function test()
{
  return;
  {
    javascript : "fantastic"
  };
}
Run Code Online (Sandbox Code Playgroud)


Mic*_*l R 5

我个人更喜欢 Allman 风格的可读性(相对于 K&R 风格)。

\n\n

而不是\xe2\x80\xa6

\n\n
function test() {\n  return {\n    javascript : "fantastic"\n  };\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我喜欢\xe2\x80\xa6

\n\n
function test() \n{\n  var obj =\n  {\n    javascript : "fantastic"\n  };\n\n  return obj;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

但这是一种解决方法。不过我可以忍受。

\n

  • 我认为我们应该避免偏离主流的个人偏好。我们应该遵循大多数人的选择,这会促进一致性,从而增加可读性 (6认同)
  • 我发现他的代码比 K&amp;R 更具可读性。当你的意思是“可读”时相当主观 (2认同)