【问题标题】:Why doesn't a Javascript return statement work when the return value is on a new line?当返回值在新行时,为什么 Javascript 返回语句不起作用?
【发布时间】:2012-01-21 15:34:09
【问题描述】:

考虑以下 JavaScript:

function correct()
{
    return 15;
}

function wrong()
{
    return
          15;
}

console.log("correct() called : "+correct());
console.log("wrong() called : "+wrong());

上述代码 sn-p 中的correct() 方法返回正确的值,在这种情况下为15。但是,wrong() 方法返回 undefined。大多数其他语言并非如此。

以下函数是正确的,并返回正确的值。

function wrong()
{
    return(
          15);
}

如果语法错误,它应该会发出一些编译器错误,但它不会。为什么会这样?

【问题讨论】:

  • 这是我在返回值周围加上括号的原因之一。
  • 结果是 15,而不是显示的 10。
  • 是的已编辑。写错了。
  • 语法没有错,它是有效的,只是没有预料到。在代码中的 return 语句之后,您只有一个无法访问的语句 15

标签: javascript return


【解决方案1】:

从技术上讲,javascript 中的分号是可选的。但实际上它只是在某些换行符处为您插入它们,如果它认为它们丢失了。但它为您做出的决定并不总是您真正想要的。

return 语句后跟一个新行告诉 JS 解释器应该在 return 之后插入一个分号。因此,您的实际代码是这样的:

function wrong()
{
    return;
          15;
}

这显然是错误的。那么为什么会这样呢?

function wrong()
{
     return(
           15);
}

这里我们以 open( 开始一个表达式。当 JS 发现新行时,它知道我们在表达式的中间,并且在这种情况下不会插入任何分号。

【讨论】:

  • 不,分号是语法的正式一部分,并且在该语言的语法产生中注意到分号是可选的。只是标准定义了省略它们时的行为。所以,它更像是一个特例……它就像是标准的附加组件。
  • 可选,我的意思是脚本可以在没有它们的情况下解析。与许多其他语言(如 C 或 Java)相反,当分号不存在时,它们会在编译/评估时抛出错误。我并不是要鼓励 javascript 中缺少分号。事实上,恰恰相反。
  • 困扰我的是“正式”这个词。省略是可以容忍的,但分号 语法的一部分 - 正式。
  • 很公平,那么“技术上”怎么样 :)
  • “在实践中”怎么样......但是,请注意,分号并非在所有情况下都是可选的,仅在某些情况下是可选的。
【解决方案2】:

如果在该行的return 语句之后没有任何内容,则将在那里插入;,这将导致返回没有任何值=> 返回值为undefined

见:http://lucumr.pocoo.org/2011/2/6/automatic-semicolon-insertion/

【讨论】:

    【解决方案3】:

    javascript的命令行不能被换行符打破。但是函数的参数可能会被破坏,不强烈推荐(在您的示例中完成)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-22
      • 1970-01-01
      • 1970-01-01
      • 2013-04-28
      • 2019-03-15
      • 1970-01-01
      • 2017-11-04
      • 2015-05-11
      相关资源
      最近更新 更多