当返回值在新行上时,为什么Javascript return语句不起作用?

Lio*_*ion 29 javascript return

请考虑以下Javascript代码.

function correct()
{
    return 15;
}

function wrong()
{
    return
          15;
}

console.log("correct() called : "+correct());
console.log("wrong() called : "+wrong());
Run Code Online (Sandbox Code Playgroud)

correct()上面代码片段中的方法返回正确的值,在这种情况下为15.15然而,该方法返回wrong().大多数其他语言并非如此.



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

function wrong()
{
    return(
          15);
}
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*yne 44

从技术上讲,javascript中的半冒号是可选的.但实际上它只是在某些换行符中为它们插入它们,如果它认为它们丢失的话.但它为你做出的决定很少是你真正想要的.

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

function wrong()
{
    return;
          15;
}
Run Code Online (Sandbox Code Playgroud)

这显然是错的.那么为什么这样呢?

function wrong()
{
     return(
           15);
}
Run Code Online (Sandbox Code Playgroud)

那么我们在这里开始表达(.JS知道我们在找到新行时处于表达式的中间,并且足够聪明,在这种情况下不插入任何半冒号.

  • 不,半冒号正式是语法的一部分,并且在语法的句法产生中注意到半冒号是可选的.只是标准定义了行为,如果省略它们.所以,它更像是一个特殊情况......它就像是标准的附加组件. (2认同)

kub*_*etz 5

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

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