讀古今文學網 > 編寫高質量代碼:改善JavaScript程序的188個建議 > 建議33:優化循環結構 >

建議33:優化循環結構

循環是最浪費資源的一種流程。循環結構中一點小小的損耗都會被成倍放大,從而影響程序運行的效率。下面從以下幾個方面介紹如何優化循環結構,從而提高循環結構的執行效率。

(1)優化結構

循環結構常常與分支結構混用在一起,因此如何嵌套就非常講究了。例如,設計一個循環結構,結構內的循環語句只有在特定條件下才被執行。使用一個簡單的例子來演示,其正常思維結構如下:


var a=true;

for(var b=1;b<10;b++){//循環結構

if(a==true){//條件判斷

}

}


很明顯,在這個循環結構中if語句會被反覆執行。如果這個if語句是一個固定的條件檢測表達式,也就是說,如果if語句的條件不會受循環結構的影響,那麼不妨採用如下的結構來設計:


if(a==true){//條件判斷

for(var b=1;b<10;b++){//循環結構

}

}


這樣,if語句只被執行一次,如果if條件不成立,則直接省略for語句的執行,從而使程序的執行效率大大提高。但是,如果if條件表達式受循環結構的制約,就不能夠採用這種結構嵌套了。

(2)避免不必要的重複操作

在循環體內經常會存在不必要的損耗。例如,在下面的這個示例中,在循環內聲明數組,然後讀取數組元素的值。


for(var b=0;b<10;b++){

var a=new Array(1,2,3,4,5,6,7,8,9,10);

alert(a[b]);

}


顯然,在這個循環結構中,每循環一次都會重新定義數組,這樣的設計極大地浪費了資源。如果把這個數組放在循環體外會更加高效,例如:


var a=new Array(1,2,3,4,5,6,7,8,9,10);

for(var b=0;b<10;b++){

alert(a[b]);

}


在日常開發中,類似這樣不必要且重複的事情常常會浪費大量的系統資源,其實只要稍微留意,此類問題就會避免。

(3)妥善定義循環變量

對於for循環來說,它主要利用循環變量來控制整個結構的運行。當循環變量僅用於結構內部時,不妨在for語句中定義循環變量,這樣能夠優化循環結構。例如,計算1~100數字的和:


var s=0;

for(var i=0;i<=100;i++){

s+=i;

}

alert(s);


顯然下面的做法就不是很妥當,因為單獨定義循環變量,實際上增大了系統開銷。


var i=0;

var s=0;

for(i=0;i<=100;i++){

s+=i;

}

alert(s);