为什么返回的值应该与JavaScript中的return语句在同一行

Why does the value returned should be on the same line as the return statement in JavaScript?

本文关键字:语句 一行 return 中的 返回 JavaScript 为什么      更新时间:2023-09-26

以下内容无法正常工作:

function test()
{
  // Returns undefined, even though I thought it would return 1
  return
  1;
}

显然,该值应该在同一行:return 1;。为什么我可以写之类的东西

// Assigns 1 to foo just fine
foo
=
1;

但是return语句的工作方式不同?

它明确地是语言规范的一部分。如果不是,仍然会有return问题:

if (something())  return
counter = counter + 1;

如果没有分号插入规则,丢失的分号将触发行为,这种行为(我认为)与现在return语句在换行符中拆分时发生的情况一样奇怪。

如果返回表达式不在同一行,Javascript会自动在"return"语句后插入分号。

JavaScript有一种通过自动插入分号来纠正错误程序的机制。不要依赖于此。它可以掩盖更严重的错误。它有时会在不受欢迎的地方插入分号。请考虑在return语句中插入分号的后果。如果return语句返回值,则该值表达式必须与return在同一行开始:

return
{
   status: true
};

这似乎返回了一个包含状态成员的对象。不幸的是,分号插入会使它变成一个语句返回undefined。没有分号插入导致的警告对节目的曲解。如果{位于前一行的末尾,而不是下一行的开头:

return {
   status: true
};

引用自本文,引用Douglas Crockford的JavaScript:The Good Parts。版权所有2008 Yahoo!股份有限公司,978-0-596-51774-8

JavaScript在某些情况下会插入分号,试图将原本无效的程序变成有效的程序。特别是,return语句就是所谓的"受限生产"的一个例子——在值之前不允许在返回后有换行符,因此它被转换为return;,下面的值成为一个单独的语句。

在的情况下

foo
=
1

这不是一个受限制的生产,而且=1在该位置都不是非法标记,因此没有试图在前一行的末尾插入分号。

JavaScript使用分号插入!对于你忘记用分号关闭的每一行,JS都会自动插入!在这种情况下:

return // auto semicolon insertion
{ // that's fine
    1; // yey here's one
} // ok, np
// bye bye

这意味着在JavaScript中,{左括号的使用不像在其他语言中那样由开发人员选择。你必须遵守规则:

return {
    1;
}