2014-02-05 47 views
1

我想讓我的JavaScript符合從函數返回值的最佳做法。目前,我聲明瞭一個變量,在該函數中處理該變量,然後將其返回。我認爲明確陳述事情是很好的做法,但我想知道這只是我頭腦中的一個神話,還有更好的方法。所以這兩種方法,或甚至這兩種方法,哪個最好?由於Javascript:從函數返回值的最佳方法/練習是什麼?

實例A:

function foo(a){ 

    var str = ""; 

    if (a == "bar"){ 
     str = "barbar"; 
    } else { 
     str = "foofoo"; 
    } 

    return str; 
} 

例B:

function foo(a){ 

    if (a == "bar"){ 
     return "barbar"; 
    } else { 
     return "foofoo"; 
    } 
} 
+2

爲什麼要寫這樣的額外代碼? – SLaks

+0

查看第二個函數返回的內容不是很容易嗎? –

+0

我懷疑這很大程度上取決於你的代碼做什麼。在前者的情況下,只有當我有一個返回值時,我纔會這樣做,我在整個函數中進行連接,而我通常會執行後者。 – Seiyria

回答

1

在Javascript中存在用於一個非常小的性能改進如實施例所述的你有一個額外的變量str必須在局部範圍內3次(初始化被查找,設置一個或另一個值,並返回)。

例A實際上是在幕後是這樣的(請注意,你不能真正明確地訪問本地對象,你聲明任何var是它自動):

function foo(a){ 

    local["str"] = ""; 

    if (a == "bar"){ 
     local["str"] = "barbar"; 
    } else { 
     local["str"] = "foofoo"; 
    } 

    return local["str"]; 
} 

但是,您將需要爲了看到它們的差異 - 這種情況幾乎可以忽略不計,並可能在最新優化的Javascript引擎中完全消除(如更好的瀏覽器中所見)。我很確定Chrome的V8引擎確實如此。

除此之外,這是一個編碼風格的問題 - 許多團隊更喜歡A,因爲您可以在str上設置手錶並始終知道它的含義。我個人更喜歡B,因爲它更多spartan,因爲我發現短路邏輯更容易遵循,但許多開發人員不喜歡它,因爲如果他們錯過了早期return他們可以發現很難遵循的錯誤。

這真是一個'房子風格'的問題。

+0

對事物如何工作的很好的解釋。謝謝 :) – Phil

1

實例B中,你可以做到以下幾點,這將是我會做什麼,你不需要額外的其他因爲你回來,如果你評價真實:

function foo(a){ 
    if (a == "bar"){ 
     return "barbar"; 
    } 
    return "foofoo"; 
} 
0

在你的例子我不知道如果任一人是科技更好。一個好的用例就是在循環內部,如果你得到你正在尋找的結果,那麼立即返回值。如果你這樣做,當你已經得到你想要的結果時,你的循環將不必繼續執行。

相關問題