请考虑以下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);
}
如果语法错误,它应该发出一些编译器错误,但事实并非如此。为什么会这样?
答案 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的命令行不能被换行符破坏。但是函数的参数可以被破坏,而不是强烈推荐(在你的例子中完成)。