如果我有一個JavaScript函數,它是可能的,我不從每一個代碼路徑返回一個值,例如:的Javascript功能,不以任何情況下返回值
function f()
{
if (checkSomething())
{
return 42;
}
// no return statement here
}
這是有效的JavaScript或它是否只能偶爾運行(即在某些瀏覽器中運行時可能會出現問題)?
如果我有一個JavaScript函數,它是可能的,我不從每一個代碼路徑返回一個值,例如:的Javascript功能,不以任何情況下返回值
function f()
{
if (checkSomething())
{
return 42;
}
// no return statement here
}
這是有效的JavaScript或它是否只能偶爾運行(即在某些瀏覽器中運行時可能會出現問題)?
是的,它是有效的JavaScript。如果checkSomething()
的計算結果爲false
,則它將返回undefined
。
有關更多詳細信息,請參閱http://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope。儘管如此,您應該注意,返回不同類型的數據(在這種情況下,整數或undefined
)是不好的做法。
這段JavaScript會起作用,請記住,如果您嘗試讀取f
的返回值,那麼如果沒有執行return
語句,它將設置爲undefined
。
我個人認爲這個代碼有點奇怪。如果您要從一個代碼路徑返回,我建議您也從其他所有可能的代碼路徑返回。這樣,閱讀和使用你的代碼的人就可以確切地知道會發生什麼。
由於Javascript是一種鬆散的語言與編譯的語言相比,你可以擺脫大多數編譯語言不允許的東西。所以是的,它可以做到,這只是一個問題,你是否想要做這樣的事情。如果您嘗試使用C#或類似語言編譯此代碼,編譯器會生成一個錯誤。
我不想批評你的代碼,只是提供一個好的設計建議。函數旨在返回所有代碼路徑上的值,並由調用代碼來檢查返回值並決定要執行的操作。您可以檢查未定義的返回值或checkSomething()返回false時的返回值,或者可以將該值設置爲更有意義的值,以便調用代碼在返回時可以檢查。你可能有返回值意味着某些東西給調用者。 -1意味着一件事,-2意味着別的東西。
希望這會有所幫助。
+1但是任何東西都是虛假的; 0等人,而不僅僅是錯誤的。 –
好點,我會更新。 – slaphappy