2013-10-10 56 views
1

考慮到這一點:技術進場做/而

var getToDaChoppa = false; 

var warIsHell = function() { 
    // Write your do/while loop here! 
    do { 
     console.log("I can't my legs omg my LEGS"); 
    } while (getToDaChoppa); 
}; 

warIsHell(); 

var getToDaChoppa = function() { 
    var getToDaChoppa = false; 
    do { 
     console.log("I can't my legs omg my LEGS"); 
    } while (getToDaChoppa); 
}; 

getToDaChoppa(); 

我真的很想知道其中的代碼是從技術角度更好。 (更低的內存使用率,垃圾產生等)。對js來說,我很漂亮,但我想確保我寫的是最好的代碼。

從我有限的經驗來看,第二個片段會比第一個片段產生雙重垃圾,但另一方面,第一個片段使用的內存比第二個片段多一倍,所以我想知道這裏最好的方法是什麼。 Ofc如果你需要擺動變量值,「我理解第一個更通用?」,但我不能完全理解這兩種方法的優點/缺點。

任何一個小的解釋將是很大的幫助Ø:)的

+0

您的隨機縮進會讓您的問題更難閱讀。 –

+0

沒有足夠的經驗知道什麼是縮進的最佳實踐。 (是的,這樣的事情是可能的)。 :( – Malcomiles

+0

好了,Joachim修正了它,區別在於函數的內容是縮進的,對於任何區塊都是這樣做的 –

回答

0

我你的兩個功能之間看到的主要區別是,第一個使用全局(或至少外部),變量,而第二個使用本地變量。

然後規則很簡單:如果您不在該範圍中使用它,請不要在外部範圍中聲明變量。總是在最內部的範圍內聲明你的變量。這使代碼更具可讀性並限制了碰撞風險。試圖通過將外部服裝變爲外部來減少服裝是一種可怕的做法,並且毫無用處,除非在一個非常特殊的情況下,你通過分析證明你有問題並且以這種方式解決(那麼...我不會相信你.. )。

第二條規則是:如果可能,不要影響變量。用布爾變量隱藏函數的名字是非常令人困惑的。

這裏有一個「固定」代碼:

var getToDaChoppa = function() { 
    var finished = false; 
    do { 
     // some code, which hopefully will at some point set finished to true 
    } while (!finished); // you wanted a !, here, no ? 
}; 
getToDaChoppa(); 
+0

我會尋找更多關於這個「陰影」陷阱的信息,但是你的代碼示例使得它非常清楚,最好的做法是非常瞭解變量名稱以及何時使用它們。thx。:) – Malcomiles

+0

@Malcomiles要映射外部作用域的變量,同名到內部作用域中的另一個變量。 –

+0

我現在看到。 THX :) – Malcomiles

0

我要說的是第二種方法比較好,只是因爲你保持狀態變量的函數範圍內,從而不污染全局範圍。

另外,不要將變量命名爲與該函數同名。

+0

謝謝,所以命名約定比我首先要重要得多。 – Malcomiles