2011-12-16 45 views
21

請考慮以下Javascript代碼。當返回值在新行上時,爲什麼Javascript return語句不工作?

<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); 
} 

如果語法是錯誤的,它應該發出一些編譯器錯誤,但事實並非如此。爲什麼會發生?

+4

[Javascript的自動分號插入的規則是什麼?](http://stackoverflow.com/questions/2846283/what-are-the-rules-for-javascripts-automatic-semicolon-insertion) – 2011-12-16 00:47:40

+1

這是我把我的退貨價值放在身邊的原因之一。 – jfriend00 2011-12-16 00:50:14

回答

37

技術上,半冒號在JavaScript中是可選的。但實際上它只是插入他們爲你在某些換行字符,如果它認爲他們失蹤。但它對你的決定很少是你真正想要的。

return聲明後跟一個新行告訴JS intelter在該return之後應該插入一個分號。因此你的實際代碼是這樣的:

function wrong() 
{ 
    return; 
      15; 
} 

這顯然是錯誤的。那麼爲什麼這個工作?

function wrong() 
{ 
    return(
      15); 
} 

那麼在這裏,我們開始一個表達與開放(。 JS知道我們正處於表達式的中間,因爲它發現了新行,並且足夠聰明,在這種情況下不會插入任何分號。

1

javascript的命令行不能被換行符打斷。但功能的論點可以被打破,而不是強烈推薦(在你的例子中完成)。

相關問題