首頁 web前端 js教程 JavaScript中for迴圈寫法對運作效率有什麼影響?

JavaScript中for迴圈寫法對運作效率有什麼影響?

Jul 19, 2017 pm 02:40 PM
javascript js 效率

for迴圈寫法對效率的影響

總的來說對於for迴圈的寫法有這麼兩種:

  1. 不寫宣告變數的寫法:for(var i = 0;i<arr.length;i++){}

  2. 寫入宣告變數的寫法:for (var i = 0,len = arr.length;i < len;i++){}

除了for迴圈還有forEach() ,也有文章說forEach()效率最高,推薦用forEach()寫法,那麼到底哪個效率高呢?做個測試來看看吧。

測試方案

總的測試方案如下:

  1. 做一個容納4千萬的測試陣列變數。

  2. 分別用兩種寫法的for迴圈和foreach對這個測試變數進行遍歷。

  3. 在同一台穩定機器上,進行10次測試,最後取平均值。

  4. 測試環境: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(&#39;foreach&#39;);
 var newArrs = [];
 testArrs.forEach(function(i){
 newArrs.push(i);
 });
 console.timeEnd(&#39;foreach&#39;);
}
登入後複製

沒有宣告變數的for循環:


function testNoDeclare(testArrs){
 console.time(&#39;no declare&#39;);
 var newArrs = [];
 for(var i = 0;i<testArrs.length;i++){
 newArrs.push(i);
 }
 console.timeEnd(&#39;no declare&#39;);
}
登入後複製

有變數宣告的寫法


##

function testUseDeclare(testArrs){
 console.time(&#39;use declare&#39;);
 var newArrs = [];
 for(var i = 0,len = testArrs.length;i<len;i++){
 newArrs.push(i);
 }
 console.timeEnd(&#39;use declare&#39;);
}
登入後複製

執行測試函數

執行測試函數這裡很簡單啦,就是呼叫函數就可以了


testForeach(testArrs);
testNoDeclare(testArrs);
testUseDeclare(testArrs);
登入後複製

測試結果

經過10次測試,得到了以下結果

foreach不寫宣告寫宣告2372.891ms672.530ms743.974ms#2431.821ms2431.821ms #710.275ms805.676ms2422.448ms729.287ms741.014ms#2330.894ms730.200ms#755.390ms2423.186ms#703.255ms769.674 ms2379.167ms689.811ms741.040ms#2372.944ms710.524ms726.522ms#747.427ms817.098 ms平均值
##2372.944ms #712.103ms
2316.005ms726.518ms
2535.289ms733.826ms
2560.925ms#793.680ms
平均值平均值

2414.56ms720.15ms

755.83ms

#不知道結果有沒有讓你出乎意料呢?沒想到最平常的寫法效率最高,為什麼?我也沒想明白,誰知道就告訴我吧,但我估計寫聲明的寫法是沒有意義的。因為

len = arr.length

這個
arr.length

可能已經快取起來了,所以我們在宣告個len變數來儲存是沒有意義的。
  1. for迴圈的特殊寫法

  2. for迴圈的基本語法是:

  3. ##
    for (语句 1; 语句 2; 语句 3)
    {
    被执行的代码块
    }
    登入後複製

  4. 語句1:在迴圈(程式碼區塊)開始前執行

語句2:定義執行迴圈(程式碼區塊)的條件


語句3:在迴圈(程式碼區塊)已執行之後執行


如果我們用for迴圈要輸出1到10,我們可以這麼寫:

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
}
登入後複製
###這個rule = rules[i++]就是判斷條件,當成為undefined時就會終止迴圈啦。所以這段程式碼換成普通寫法就是這樣的:############
for(var i = 0;i < rules.length;i++){
 var rule = rules[i]
}
登入後複製
###其實就是把判斷和賦值放到一起了,一邊循環一邊賦值。是不是挺簡單? ###

以上是JavaScript中for迴圈寫法對運作效率有什麼影響?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
建議:優秀JS開源人臉偵測辨識項目 建議:優秀JS開源人臉偵測辨識項目 Apr 03, 2024 am 11:55 AM

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

PyCharm遠端開發實用指南:提高開發效率 PyCharm遠端開發實用指南:提高開發效率 Feb 23, 2024 pm 01:30 PM

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

簡易JavaScript教學:取得HTTP狀態碼的方法 簡易JavaScript教學:取得HTTP狀態碼的方法 Jan 05, 2024 pm 06:08 PM

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

js和vue的關係 js和vue的關係 Mar 11, 2024 pm 05:21 PM

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

子網路遮罩:作用與網路通訊效率的影響 子網路遮罩:作用與網路通訊效率的影響 Dec 26, 2023 pm 04:28 PM

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

如何在JavaScript中取得HTTP狀態碼的簡單方法 如何在JavaScript中取得HTTP狀態碼的簡單方法 Jan 05, 2024 pm 01:37 PM

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

私有化部署 Stable Diffusion 玩 AI 繪圖 私有化部署 Stable Diffusion 玩 AI 繪圖 Mar 12, 2024 pm 05:49 PM

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

掌握Python,提升工作效率與生活品質 掌握Python,提升工作效率與生活品質 Feb 18, 2024 pm 05:57 PM

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

See all articles