做爲一名前端開發,for和foreach循環遍歷幾乎天天都在使用,那麼這兩種遍歷方式哪種效率更高呢? 效率高的緣由是什麼呢?
javascript
經過下標,對循環中的代碼反覆執行,功能強大,能夠經過index取得元素。在處理比較複雜的處理的時候較爲方便
前端
forEach() 方法用於調用數組的每一個元素,並將元素傳遞給回調函數。foreach有的也叫加強for循環,foreach實際上是for循環的一個特殊簡化版。注意,forEach() 對於空數組是不會執行回調函數的
java
array.forEach(function(currentValue, index, arr), thisValue)複製代碼
function(currentValue, index, arr):必需。 數組中每一個元素須要調用的函數。
數組
currentValue 必需,當前元素 index 可選,當前元素的索引值。 arr 可選,當前元素所屬的數組對象。 thisValue: 可選。傳遞給函數的值通常用 "this" 值。若是這個參數爲空, "undefined" 會傳遞給 "this"
值
微信
console.time
和
console.timeEnd
這兩個方法能夠用來讓WEB開發人員測量一個javascript腳本程序執行消耗的時間。隨着WEB應用愈來愈重要,JavaScript的執行性能也日益受到重視,WEB開發人員知道一些性能測試機器是必須的。測試JavaScript性能的方法有不少,但
console.time/
console.timeEnd
兩個方法是最基本、最直接的技巧。
數據結構
- console.time方法是開始計算時間
- console.timeEnd是中止計時,輸出腳本執行的時間。
- 這兩個方法中均可以傳入一個參數,做爲計時器的名稱,它的做用是在代碼並行運行時分清楚各個計時器。
- 對
console.timeEnd
的調用會當即輸出執行總共消耗的時間,單位是毫秒。
// 啓動計時器
console.time('計時器名稱');
// (寫一些測試用代碼)
// 中止計時,輸出時間
console.timeEnd('計時器名稱');
複製代碼
在1000000這個級別下,forEach 的性能高於for
函數
let arrs = new Array(1000000);
console.time('for');
for (let i = 0; i < arrs.length; i++) {};
console.timeEnd('for'); // for: 10.329833984375ms
console.time('forEach');
arrs.forEach((arr) => {});
console.timeEnd('forEach'); // forEach: 5.076904296875ms複製代碼
在10000000這個級別下,forEach 的性能仍是高於for性能
let arrs = new Array(10000000);
console.time('for');
for (let i = 0; i < arrs.length; i++) {};
console.timeEnd('for'); // for: 95.157958984375ms
console.time('forEach');
arrs.forEach((arr) => {});
console.timeEnd('forEach'); // forEach: 37.9619140625ms複製代碼
在100000000級以上的量級上 ,forEach的性能遠遠低於for的性能
測試
let arrs = new Array(100000000);
console.time('for');
for (let i = 0; i < arrs.length; i++) {};
console.timeEnd('for'); // for: 939.18994140625ms
console.time('forEach');
arrs.forEach((arr) => {});
console.timeEnd('forEach'); // forEach: 1614.8642578125ms複製代碼
【3.1】遍歷
優化
for循環按順序遍歷,forEach使用iterator迭代器遍歷
【3.2】數據結構
for循環是隨機訪問元素,foreach是順序鏈表訪問元素
【3.3】性能上
對於arraylist,是順序表,使用for循環能夠順序訪問,速度較快;使用foreach會比for循環稍慢一些。
對於linkedlist,是單鏈表,使用for循環每次都要從第一個元素讀取next域來讀取,速度很是慢;使用foreach能夠直接讀取當前結點,數據較快;
foreach相對於for循環,代碼減小了,可是foreach依賴IEnumerable。在運行的時候效率低於for循環。固然了,在處理不肯定循環次數的循環,或者循環次數須要計算的狀況下。使用foreach比較方便。並且foreach的代碼通過編譯系統的代碼優化後,和for循環的循環相似。
能夠說,foreach語句是for語句的特殊簡化版本,在遍歷數組、集合方面,foreach爲開發人員提供了極大的方便。在複雜的循環設計時,仍是應該使用for循環更加的靈活。
文章每週持續更新,能夠微信搜索「 前端大集錦 」第一時間閱讀,回覆【視頻】【書籍】領取200G視頻資料和30本PDF書籍資料