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

我已阅读这篇文章,其中显示了一个示例。 请解释下面的代码片断为什么会因大括号的位置变化而返回不同的结果。

带有开口大括号的示例{换行符。

function test()
{
  return
  { /* <----curly brace in new line */
    javascript: "fantastic"
  };
}

var r = test();
try {
  alert(r.javascript); // does this work...?
} catch (e) {
  alert('no - it broke: ' + typeof r);
}

test()返回undefined

带开启大括号的示例{return相同。

function test()
{
  return { /* <----inline curly brace */
    javascript : "fantastic"
  };
}

var r = test();
try {
  alert(r.javascript); // does this work...?
} catch (e) {
  alert('no - it broke: ' + typeof r);
}

test()返回一个对象。

这里是现场示例小心大括号。


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

function test()
{
  return; // <- notice the inserted semicolon
  { 
    javascript : "fantastic"
  };
}

另见http://javascript.crockford.com/code.html

在你的第二个例子中,你返回一个对象(由大括号构建)与属性javascript和它的值奇妙,实际上是一样的:

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

Javascript在语句结束时不需要分号,但缺点是必须猜测分号在哪里。 大多数情况下,这不是问题,但有时它会在您不打算分号的地方发明分号。

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

如果你像这样格式化代码:

function getAnswer() {
   var answer = 42;
   return
      answer;
}

然后它被解释为这样:

function getAnswer() {
  var answer = 42;
  return;
  answer;
}

return语句将其作为无参数形式,而参数变成它自己的一个声明。

你的代码也一样。 该功能被解释为:

function test()
{
  return;
  {
    javascript : "fantastic"
  };
}

这是因为JavaScript最常提到“;” 在每一行的结尾,基本上当你有回报时(在同一行中,javascript引擎看到会有更多的东西,而当它换了新行时,它认为你忘了放“;”,并把它放在你的头上。

链接地址: http://www.djcxy.com/p/25437.html

上一篇: Why does a results vary based on curly brace placement?

下一篇: GStreamer in OpenCV does not send video data over UDP