为什么换行的return语句不返回任何值?

时间:2018-11-05 12:13:11

标签: javascript

请考虑以下情况:

function func1() {
  return {
      hello: "world"
  };
}

function func2() {
  return
  {
      hello: "world"
  };
}

console.log(func1());
console.log(func2());

第一个函数func1()将返回对象{ hello: "world" },但是第二个函数func2()将返回undefined为什么?我猜想返回的值必须与return关键字在同一行。我在这里不知道什么“规则”?

2 个答案:

答案 0 :(得分:10)

“规则”为automatic semicolon insertion

return本身就是一个有效的语句,因此将其视为完整的语句。从下一行开始的代码在语法上也是有效的(尽管在这种情况下,它根本不解释为对象,而是包含标签和包含字符串文字的单个“语句”的代码块)。因此,这里自动插入了分号,并且将两者视为单独的语句。

在该行之后开始的对象将被忽略。

答案 1 :(得分:1)

这是因为自动分号插入。 JS引擎认为您在空白return;语句上省略了分号,并“有帮助地”为您插入了分号。

除了删除换行符之外,您还可以通过在{..}上加上括号来解决此问题,第一个括号与return相同。