建議29:準確使用迴圈體(3)
如果for迴圈的迴圈條件比較複雜,不是簡單的數值迭代,這時for語句就必須考慮如何把迴圈條件和迴圈語句聯絡起來才可以正確地執行整個for迴圈。因此,根據for結構的運算順序,for語句首先計算第乙個和第二個表示式,然後執行迴圈體語句,最後返回執行for語句的第三個表示式,如此迴圈執行。例如:
for(var a = true, b = 1; a; b ++ )
在上面的這個示例中,for語句的第三個表示式不是直接計算步長的,整個for迴圈也沒有明確告知迴圈步長的表示式,如果要確定迭代的步長,就必須依據迴圈體內的語句。因此,整個for結構的邏輯思維就存在乙個迴旋的過程。
for迴圈的特異性導致在執行複雜條件時效率會大大降低。相對而言,while迴圈天生就是為複雜的條件而設計的,它將複雜的迴圈控制放在迴圈體內執行,而while語句自身僅用於測試迴圈條件,這樣就避免了結構的分隔和邏輯的跳躍。例如,使用while結構來表示這種複雜的條件迴圈的**如下,這種思維變化的示意圖如圖1.5所示。
var a = true, b = 1; while(a)
(3)從達成目標的角度比較
有些迴圈的迴圈次數在迴圈之前就可以**,如計算1~100的數字和。而有些迴圈具有不可**性,無法事先確定迴圈的次數,甚至無法預知迴圈操作的趨向,這些構成了在設計迴圈結構時必須考慮的達成目標需要解決的問題。即使是相同的操作,如果達成目標的角度不同,可能重複操作的設計也就不同。例如,統計全班學生的成績和統計合格學生的成績就是兩個不同的達成目標。一般來說,在迴圈結構中動態改變迴圈變數的值時建議使用while結構,而對於靜態的迴圈變數,則可以考慮使用for結構。
JS程式設計建議 31 使用迭代
建議31 使用迭代 任何可以用遞迴實現的演算法都可以用迭代實現。迭代演算法通常包括幾個不同的迴圈,分別對應演算法過程的不同方面。雖然迭代也會導致效能問題,但是使用優化的迴圈替代長時間執行的遞迴函式可以提高效能,因為執行乙個迴圈比反覆呼叫乙個函式的開銷要低。例如,合併排序演算法是最常用的以遞迴實現的演...
JS程式設計建議 15 避免使用continue
建議15 避免使用continue continue語句與break語句用法相似,在迴圈結構中用於控制邏輯的執行方向。break語句用於停止迴圈,而continue語句卻用於再次執行迴圈。與break語句語法相同,continue語句可以跟隨乙個標籤名,用來指定繼續執行的迴圈結構的起始位置。cont...
JS程式設計建議 24 優化if邏輯(1)
建議24 優化if邏輯 1 邏輯順序體現了人的思維的條理性和嚴密性。合理的順序可以提公升解決問題的品質,相反,混亂的順序很容易導致各種錯誤的發生。在分支結構中經常需要面臨各種優化邏輯順序的問題。人在思考問題時,一般總會對各種最可能發生的情況做好準備,這叫做 有備而來 分支結構中各種條件根據情況的先後...