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

时间:2011-12-16 00:45:15

标签: javascript

请考虑以下Javascript代码。

<script language="javascript" type="text/javascript">
        function correct()
        {
            return 15;
        }

        function wrong()
        {
            return
                  15;
        }

        alert("correct() called : "+correct());
        alert("wrong() called : "+wrong());

</script>

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



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

function wrong()
{
     return(
           15);
}

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

3 个答案:

答案 0 :(得分:39)

从技术上讲,javascript中的半冒号是可选的。但实际上它只是在某些换行符中为它们插入,如果它认为它们丢失了。但它对你的描述很少是你真正想要的。

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

function wrong()
{
    return;
          15;
}

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

function wrong()
{
     return(
           15);
}

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

答案 1 :(得分:4)

如果该行上的return语句后面没有任何内容,则会在其中插入;,这将导致返回时没有任何值=&gt;返回值为undefined

请参阅:http://lucumr.pocoo.org/2011/2/6/automatic-semicolon-insertion/

答案 2 :(得分:1)

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