javascript - 为什么新行上的 return 语句不返回任何值?

标签 javascript

<分区>

考虑以下情况:

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

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

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

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

最佳答案

“规则”是 automatic semicolon insertion .

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

return 之后的行开始的代码被简单地忽略。

请注意,一些 IDE 和 linters 可以帮助解决这个问题,因为您基本上拥有无法访问的代码。下面是 VSCode 默认语法高亮显示这两个函数的截图。您可以看到 hello: world 在第二个函数中被涂上了暗淡的颜色:

Screenshot of VSCode showing unreachable code.

关于javascript - 为什么新行上的 return 语句不返回任何值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53154203/

相关文章:

javascript - 如何在Javascript中从一个对象中删除所有空白对象?

javascript - 一个函数,用于计算元素的出现次数或频率并返回一个对象,但删除出现一个的元素并返回其余元素

javascript - 为什么这会导致继承?

javascript - 预加载的 AJAX 对象是否有名称?

javascript - 拖动 anchor 绑定(bind) ‘mousedowd, mousemove, mouseup’时如何防止重定向?

javascript - 遍历jsTree树

JavaScript - 为什么我的第三张幻灯片没有出现?

javascript - 如何在尚未评估变量的情况下将变量传递给自定义组件?

javascript - 动态访问对象属性(附加字符串)

javascript - 如果 winWidth < 500,则光滑的 slider 会删除最后一张幻灯片