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知道我们在找到新行时处于表达式的中间,并且足够聪明,在这种情况下不插入任何半冒号.
如果return在该行的语句之后;没有任何内容,则将插入到那里,这将导致返回没有任何值 => 返回值是undefined。
见:http : //lucumr.pocoo.org/2011/2/6/automatic-semicolon-insertion/