2011-07-25 63 views
3

如果我有一個JavaScript函數,它是可能的,我不從每一個代碼路徑返回一個值,例如:的Javascript功能,不以任何情況下返回值

function f() 
{ 
    if (checkSomething()) 
    { 
    return 42; 
    } 
    // no return statement here 
} 

這是有效的JavaScript或它是否只能偶爾運行(即在某些瀏覽器中運行時可能會出現問題)?

回答

12

是的,它是有效的JavaScript。如果checkSomething()的計算結果爲false,則它將返回undefined

有關更多詳細信息,請參閱http://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope。儘管如此,您應該注意,返回不同類型的數據(在這種情況下,整數或undefined)是不好的做法。

+3

+1但是任何東西都是虛假的; 0等人,而不僅僅是錯誤的。 –

+0

好點,我會更新。 – slaphappy

2

這段JavaScript會起作用,請記住,如果您嘗試讀取f的返回值,那麼如果沒有執行return語句,它將設置爲undefined

我個人認爲這個代碼有點奇怪。如果您要從一個代碼路徑返回,我建議您也從其他所有可能的代碼路徑返回。這樣,閱讀和使用你的代碼的人就可以確切地知道會發生什麼。

3

由於Javascript是一種鬆散的語言與編譯的語言相比,你可以擺脫大多數編譯語言不允許的東西。所以是的,它可以做到,這只是一個問題,你是否想要做這樣的事情。如果您嘗試使用C#或類似語言編譯此代碼,編譯器會生成一個錯誤。

我不想批評你的代碼,只是提供一個好的設計建議。函數旨在返回所有代碼路徑上的值,並由調用代碼來檢查返回值並決定要執行的操作。您可以檢查未定義的返回值或checkSomething()返回false時的返回值,或者可以將該值設置爲更有意義的值,以便調用代碼在返回時可以檢查。你可能有返回值意味着某些東西給調用者。 -1意味着一件事,-2意味着別的東西。

希望這會有所幫助。

+0

我同意這不是很好的設計(這對我來說很明顯,所以這不是問題)。 – M4N

+0

如果我的答案是居高臨下,我很抱歉。我的目的是幫助那些可能遇到這篇文章的經驗較少的編碼人員,需要更多的背景知識。 – Moebius

相關問題