当返回值位于新行时,为什么 Javascript 返回语句不起作用?

IT技术 javascript return
2021-01-30 12:38:31

考虑以下 JavaScript:

function correct()
{
    return 15;
}

function wrong()
{
    return
          15;
}

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

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

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

function wrong()
{
    return(
          15);
}

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

3个回答

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

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

function wrong()
{
    return;
          15;
}

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

function wrong()
{
     return(
           15);
}

好吧,这里我们用一个 open 开始一个表达式(当 JS 找到新行时,它知道我们正处于表达式的中间,并且它足够聪明,在这种情况下不插入任何分号。

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

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

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

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