JavaScript中for迴圈寫法對運作效率有什麼影響?
for迴圈寫法對效率的影響
總的來說對於for迴圈的寫法有這麼兩種:
不寫宣告變數的寫法:
for(var i = 0;i<arr.length;i++){}
寫入宣告變數的寫法:
for (var i = 0,len = arr.length;i < len;i++){}
除了for迴圈還有forEach()
,也有文章說forEach()
效率最高,推薦用forEach()
寫法,那麼到底哪個效率高呢?做個測試來看看吧。
測試方案
總的測試方案如下:
做一個容納4千萬的測試陣列變數。
分別用兩種寫法的for迴圈和foreach對這個測試變數進行遍歷。
在同一台穩定機器上,進行10次測試,最後取平均值。
測試環境:CPU:Inter(R) Core i5-3210M,RAM:12GM,system:win10(x64)
測試流程
製作測試變數
先用while迴圈做個測試變數出來,這個很簡單,如下:
var testArrs = [], i = 0; while(i<40000000){ testArrs.push(i); i++; }
寫對應測試函數
測量和執行時間的程式碼,我用的是console.time()
和console.timeEnd()
來進行測試。
針對這個三個for迴圈,先做出三個函數出來,他們分別是
foreach迴圈測試:
function testForeach(testArrs){ console.time('foreach'); var newArrs = []; testArrs.forEach(function(i){ newArrs.push(i); }); console.timeEnd('foreach'); }
沒有宣告變數的for循環:
function testNoDeclare(testArrs){ console.time('no declare'); var newArrs = []; for(var i = 0;i<testArrs.length;i++){ newArrs.push(i); } console.timeEnd('no declare'); }
有變數宣告的寫法
##
function testUseDeclare(testArrs){ console.time('use declare'); var newArrs = []; for(var i = 0,len = testArrs.length;i<len;i++){ newArrs.push(i); } console.timeEnd('use declare'); }
執行測試函數
執行測試函數這裡很簡單啦,就是呼叫函數就可以了testForeach(testArrs); testNoDeclare(testArrs); testUseDeclare(testArrs);
測試結果
經過10次測試,得到了以下結果不寫宣告 | 寫宣告 | |
---|---|---|
672.530ms | 743.974ms | |
2431.821ms | ||
805.676ms | 2422.448ms | |
741.014ms | #2330.894ms | |
#755.390ms | 2423.186ms | |
769.674 ms | 2379.167ms | |
741.040ms | #2372.944ms | |
##2372.944ms | #712.103ms | |
2316.005ms | 726.518ms | |
2535.289ms | 733.826ms | |
2560.925ms | #793.680ms | |
平均值 | 平均值 |
2414.56ms
720.15ms
#不知道結果有沒有讓你出乎意料呢?沒想到最平常的寫法效率最高,為什麼?我也沒想明白,誰知道就告訴我吧,但我估計寫聲明的寫法是沒有意義的。因為
len = arr.length這個
arr.length
for迴圈的特殊寫法
- for迴圈的基本語法是: ##
語句1:在迴圈(程式碼區塊)開始前執行
for (语句 1; 语句 2; 语句 3) { 被执行的代码块 }
語句2:定義執行迴圈(程式碼區塊)的條件
for(var i=0;i<10;i++){ console.log(i); }
但是!根據上面的文法說明,我們也可以寫成這樣
for(var i=10;i--;){ console.log(i); }
剛開始看的時候我也很疑惑,怎麼能這麼寫?語句2放的是循環條件,i–是什麼判斷條件。其實不然,在語句2中,如果回傳true迴圈會繼續執行。在js中0,null,undefined,false,'',”」作為條件判斷時,其結果為false,也就說當i–到0的時候就是false,循環就終止了。
for (var i = 0, rule; rule = rules[i++];) { //do something }
for(var i = 0;i < rules.length;i++){ var rule = rules[i] }
以上是JavaScript中for迴圈寫法對運作效率有什麼影響?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

人臉偵測辨識技術已經是一個比較成熟且應用廣泛的技術。而目前最廣泛的網路應用語言非JS莫屬,在Web前端實現人臉偵測辨識相比後端的人臉辨識有優勢也有弱勢。優點包括減少網路互動、即時識別,大大縮短了使用者等待時間,提高了使用者體驗;弱勢是:受到模型大小限制,其中準確率也有限。如何在web端使用js實現人臉偵測呢?為了實現Web端人臉識別,需要熟悉相關的程式語言和技術,如JavaScript、HTML、CSS、WebRTC等。同時也需要掌握相關的電腦視覺和人工智慧技術。值得注意的是,由於Web端的計

PyCharm是一款功能強大的Python整合開發環境(IDE),廣泛用於Python開發者進行程式碼編寫、除錯和專案管理。在實際的開發過程中,大多數開發者都會面臨不同的問題,例如如何提升開發效率、如何與團隊成員進行協作開發等。本文將介紹PyCharm遠端開發的實用指南,幫助開發者更好地利用PyCharm進行遠端開發,並提高工作效率。 1.準備工作在進行PyCh

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

js和vue的關係:1、JS作為Web開發基石;2、Vue.js作為前端框架的崛起;3、JS與Vue的互補關係;4、JS與Vue的實踐應用。

子網路遮罩的角色及其對網路通訊效率的影響引言:隨著網路的普及,網路通訊成為現代社會不可或缺的一部分。同時,網路通訊的效率也成為了人們關注的焦點之一。在建置和管理網路的過程中,子網路遮罩是一項重要且基礎的配置選項,它在網路通訊中起著關鍵的作用。本文將介紹子網路遮罩的作用,以及它對網路通訊效率的影響。一、子網路遮罩的定義及作用子網路遮罩(subnetmask)

JavaScript中的HTTP狀態碼取得方法簡介:在進行前端開發中,我們常常需要處理與後端介面的交互,而HTTP狀態碼就是其中非常重要的一部分。了解並取得HTTP狀態碼有助於我們更好地處理介面傳回的資料。本文將介紹使用JavaScript取得HTTP狀態碼的方法,並提供具體程式碼範例。一、什麼是HTTP狀態碼HTTP狀態碼是指當瀏覽器向伺服器發起請求時,服務

StableDiffusion是一個開源的深度學習模型,其主要功能是透過文字描述來產生高品質的圖像,並支援圖生成、模型合併、以及模型訓練等功能。此模型的操作介面可以在下圖中看到。如何生圖下面介紹一下小鹿喝水的生圖過程,生成圖的時候分為提示詞和負面提示詞,輸入提示詞的時候要明確描述,盡量具體描述你想要的場景、對象、風格和顏色。例如,不僅僅說“小鹿喝水”,而是說“一條小溪,旁邊是茂密的樹,小溪旁有小鹿在喝水”,負面提示詞是反方向的例如:無建築物、無人物、無橋樑、無圍欄,而過於模糊的描述可能導致結果不

標題:Python讓生活更方便:掌握這門語言,提升工作效率和生活品質Python作為一種強大而簡單易學的程式語言,在當今的數位時代越來越受到人們的青睞。不僅用於編寫程式和進行數據分析,Python還可以在我們的日常生活中發揮巨大的作用。掌握這門語言,不僅能提升工作效率,還能提升生活品質。本文將透過具體的程式碼範例,展示Python在生活中的廣泛應用,幫助閱讀
