for (語句1; 語句2; 語句3) { 被執行的代碼塊 }
for (語句1; 語句2; 語句3) { 被執行的代碼塊 }
語句 1 在循環(代碼塊)開始前執行瀏覽器
語句 2 定義運行循環(代碼塊)的條件性能
語句 3 在循環(代碼塊)已被執行以後執行(這就是循環中的++i和i++結果同樣的緣由,可是性能不同,稍後解釋)code
語句1 是可選的,也就是說不使用語句1 也能夠。內存
var i=2,len=5; for (; i<len; i++){ document.write(cars[i] + "<br>"); }
var i=2,len=5; for (; i<len; i++){ document.write(cars[i] + "<br>"); }
也能夠在語句1 中初始化任意(或者多個)值:it
var arr = [1,2,3] for (var i=0,len=arr.length; i<len; i++){ document.write(cars[i] + "<br>"); }
var arr = [1,2,3] for (var i=0,len=arr.length; i<len; i++){ document.write(cars[i] + "<br>"); }
一般語句 2 用於評估初始變量的條件。console
語句 2 一樣是可選的。for循環
若是語句 2 返回 true,則循環再次開始,若是返回 false,則循環將結束。class
若是您省略了語句 2,那麼必須在循環內提供 break。不然循環就沒法停下來。這樣有可能令瀏覽器崩潰變量
一般語句 3 會增長初始變量的值。循環
語句 3 也是可選的。
語句 3 有多種用法。增量能夠是負數 (i--),或者更大 (i=i+15)。
語句 3 也能夠省略(好比當循環內部有相應的代碼時):
var i=0,len=arr.length; for (; i<len; ){ document.write(cars[i] + "<br>"); i++; }
var i=0,len=arr.length; for (; i<len; ){ document.write(cars[i] + "<br>"); i++; }
var i = 10; console.log(i++); //10 ,先引用原值,而後加1 等價於: var i= 10; console.log(i); //先輸出i i++; //而後加1 var i = 10; console.log(++i); //11 , 此次是先加1,而後輸出
var i = 10; console.log(i++); //10 ,先引用原值,而後加1 等價於: var i= 10; console.log(i); //先輸出i i++; //而後加1 var i = 10; console.log(++i); //11 , 此次是先加1,而後輸出
總結下:++在前下自加後運算;++在後先運算後自加
根據上面的for循環的語法定義 ++i 和 i++的結果是同樣的,都要等代碼塊執行完畢才能執行語句3,可是性能是不一樣的。在大量數據的時候++i的性能要比i++的性能好緣由:
i++因爲是在使用當前值以後再+1,因此須要一個臨時的變量來轉存。
而++i則是在直接+1,省去了對內存的操做的環節,相對而言可以提升性能