Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么结果会因花括号的放置而不同?_Javascript_Syntax - Fatal编程技术网

Javascript 为什么结果会因花括号的放置而不同?

Javascript 为什么结果会因花括号的放置而不同?,javascript,syntax,Javascript,Syntax,为什么下面的代码片段(取自)只因花括号的位置发生了一次更改而产生不同的结果 当开始的大括号{位于新行时,test()返回未定义的,并且“否-它已损坏:未定义”显示在警报中 功能测试() { 返回 {/*这是JavaScript的一个缺陷:自动插入分号。不以分号结尾但可能是语句结尾的行会自动终止,因此第一个示例实际上如下所示: function test() { return; // <- notice the inserted semicolon { javascrip

为什么下面的代码片段(取自)只因花括号的位置发生了一次更改而产生不同的结果

当开始的大括号
{
位于新行时,
test()
返回
未定义的
,并且“否-它已损坏:未定义”显示在警报中

功能测试()
{
返回

{/*这是JavaScript的一个缺陷:自动插入分号。不以分号结尾但可能是语句结尾的行会自动终止,因此第一个示例实际上如下所示:

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

这是因为javascript通常会在每一行的末尾加上“;所以基本上,当您在同一行中返回时,javascript引擎会看到更多的内容,当它在新行中时,它认为您忘记了加“;”,并把它放在你的面前。

问题确实是如上所述的分号注入。我刚刚读了一篇关于这个主题的好博文。它解释了这个问题以及关于javascript的更多内容。它还包含一些很好的参考。你可以读它。

这里的大括号表示一个新对象的构造。因此你的代码是eq单价为:

function test() {
  var a = { javascript : "fantastic" };
  return a;
}
如果你写下:

function test() {
  var a = { javascript : "fantastic" };
  return; // ; is automatically inserted 
      a;
}

它不再工作。

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

我的博客文章中有一个关于()的示例:

如果将代码格式化为以下格式:

function getAnswer() {
   var answer = 42;
   return
      answer;
}
function getAnswer() {
  var answer = 42;
  return;
  answer;
}
然后它被解释为:

function getAnswer() {
   var answer = 42;
   return
      answer;
}
function getAnswer() {
  var answer = 42;
  return;
  answer;
}
return语句采用无参数形式,参数成为自己的语句

您的代码也是如此。该函数被解释为:

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

我个人更喜欢Allman风格的可读性(与K&R风格相比)

而不是

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

function test() 
{
  var obj =
  {
    javascript : "fantastic"
  };

  return obj;
}

但这是一种变通方法。不过我可以接受。

是的,我也读过这篇文章,读过之后,我要求js的策划人在这里更好地解释。我不明白为什么cichy、Darin和Ivo的答案被否决了?有趣的事实:在某些引擎上,你可以注释掉自动插入的内容semicolons@ChrisT:什么?哪一个?这是在哪里探索的?@SeanMcMillan我确实读过关于它的文章,但我似乎无法从快速搜索中找到任何一篇。我记得把
return/*
*/{
将有效地注释掉旧版chrome中隐藏的分号。不确定这是否仍然适用。因为这些怪癖,我在10年前向自己承诺:远离网络!我祈祷互联网会消失……不幸的是,它没有按计划进行,现在我也不得不与这些问题作斗争。Karma是一个b*tch:)我见过一些人在JavaScript中虔诚地反对分号,我一直想知道他们如何利用不使用分号节省的额外时间。我认为我们应该避免偏离主流的个人偏好。我们应该遵循大多数人的选择,这有助于保持一致性,这将增加可读性我发现他的代码比K&R更可读。当你说“可读”时,我也更喜欢Allman…但由于ASI,当我需要返回一个对象时,我将semi保留在返回的同一行。我更喜欢这一行,而不是添加一个“var x=”行…
return
之后的半插入语义与其他地方略有不同,换行符在该位置的“含义”比“中游”更为重要。