为什么当返回值在另一行时,Javascript返回语句不能工作?

Why doesn't a Javascript return statement work when the return value is on a new line?

本文关键字:Javascript 返回 语句 工作 不能 一行 返回值 为什么      更新时间:2023-09-26

考虑以下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);
}

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

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

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

function wrong()
{
    return;
          15;
}

这显然是错误的。那么为什么这个方法有效呢?

function wrong()
{
     return(
           15);
}

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

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

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

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