【JS面试题】面试官问我:遍历一个数组用 for 和 forEach 哪个更快?

【JS面试题】面试官问我:遍历一个数组用 for 和 forEach 哪个更快?for 语句用于创建一个循环 它包含了三个可选的表达式 三个可选的表达式包围在圆括号中并由分号分隔 后跟一个在循环中执行的语句 通常是一个块语句 语法 一个表达式 包含赋值语句 或者变量声明 典型地被用于初始化一个计数器 该表达式可以使用或关键字声明新的变量 使用 var 声明的变量不是该循环的局部变量 而是与循环处在同样的作用域中 用声明的变量是语句的局部变量 该表达式的结果无意义 一个条件表达式被用于确定每一次循环是否能被执行 如果该表达式的结果为 将被执行 这个表达式是可选的 如果被

还在担心面试不通过吗?给大家推荐一个超级好用的刷面试题神器:牛客网,里面涵盖了各个领域的面试题库,还有大厂真题哦!

赶快悄悄的努力起来吧,不苒在这里衷心祝愿各位大佬都能顺利通过面试。
面试专栏分享,感觉有用的小伙伴可以点个订阅,不定时更新相关面试题:面试专栏 。
在这里插入图片描述




⭐ 前言

for 语句 和 forEach()方法相信学习对于前端的小伙伴们并不陌生,面对面试官这个问题,你能回答的上来吗? 接下来我们一起进行一下验证吧!

? 正文

要想知道哪个更快,首先我们需要了解这两个的使用方法

?1. for语句

for 语句用于创建一个循环,它包含了三个可选的表达式,三个可选的表达式包围在圆括号中并由分号分隔,后跟一个在循环中执行的语句(通常是一个块语句)。

语法:

 for ([initialization]; [condition]; [final-expression]){ 
    statement }
  • initialization:一个表达式 (包含赋值语句) 或者变量声明。典型地被用于初始化一个计数器。该表达式可以使用varlet关键字声明新的变量,使用var声明的变量不是该循环的局部变量,而是与for循环处在同样的作用域中。用let声明的变量是语句的局部变量。该表达式的结果无意义。
  • condition:一个条件表达式被用于确定每一次循环是否能被执行。如果该表达式的结果为truestatement 将被执行。 这个表达式是可选的。如果被忽略,那么就被认为永远为真。如果计算结果为假,那么执行流程将被跳到for语句结构后面的第一条语句。
  • final-expression:每次循环的最后都要执行的表达式。执行时机是在下一次condition的计算之前。通常被用于更新或者递增计数器变量。
  • statement:只要condition的结果为true就会被执行的语句。 要在循环体内执行多条语句,使用一个块语句({ ... })来包含要执行的语句。没有任何语句要执行,使用一个空语句(;)

for语句的所有的表达式都是可选的

?2. forEach() 方法

forEach() 方法对数组的每个元素执行一次提供的函数。

语法:

 arr.forEach(callback[, thisArg])

参数:

  • callback:为数组中每个元素执行的函数,该函数接收三个参数:
    • currentValue:数组中正在处理的当前元素。
    • index可选值:数组中正在处理的当前元素的索引。
    • array可选值:forEach()方法正在操作的数组。
  • thisArg:可选参数。当执行回调函数时用作this的值(参考对象)。

返回值: undefined

描述: forEach 方法按升序为数组中含有效值的每一项执行一次callback 函数,那些已删除或者未初始化的项将被跳过(例如在稀疏数组上)。 callback 函数会被依次传入三个参数:

  • 数组当前项的值
  • 数组当前项的索引
  • 数组对象本身

?3. for VS forEach (遍历数组谁更块)

话不多说上代码进行比较,到底谁会胜利呢?

 const arr = [] // 新建数组包含一百万个元素 for (let i = 0; i < 100 * 10000; i++) { 
    arr.push(i) }const length = arr.length ​ // 使用for进行数组的遍历并打印时间 console.time('for')let n1 = 0 for (let o = 0; o < length; o++) { 
    n1++ } console.timeEnd('for') // for: 2.639ms// 使用forEach进行遍历并打印时间 console.time('forEach') let n2 = 0 arr.forEach(() => { 
    n2++ }) console.timeEnd('forEach') // forEach: 14.059ms 

console.timeconsole.timeEnd这两个方法可以用来让WEB开发人员测量一个javascript脚本程序执行消耗的时间。 注意:console.time() 方法是计算器的起始方法,结束方法为 console.timeEnd() ,该方法执行后会将执行时长显示在控制台上。

?4. 文末小结:

这场大赛终究还是for语句胜利了,总结一下原因吧:

  • for 不会创建函数
  • forEach 每次都要创建一个函数来调用
  • 函数现需要独立的作用域,会有额外开销

注意:日常开发别只考虑性能,forEach的代码可读性更高


? 寄语

名 言 警 句 : 说 能 做 的 做 说 过 的 \textcolor{red} {名言警句:说能做的做说过的}

原 创 不 易 , 还 希 望 各 位 大 佬 支 持 一 下 \textcolor{blue}{原创不易,还希望各位大佬支持一下}

? 点 赞 , 你 的 认 可 是 我 创 作 的 动 力 ! \textcolor{green}{点赞,你的认可是我创作的动力!}

⭐️ 收 藏 , 你 的 青 睐 是 我 努 力 的 方 向 ! \textcolor{green}{收藏,你的青睐是我努力的方向!}

✏️ 评 论 , 你 的 意 见 是 我 进 步 的 财 富 ! \textcolor{green}{评论,你的意见是我进步的财富!}

















版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/173937.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月27日 上午7:37
下一篇 2026年3月27日 上午7:37


相关推荐

  • 人工智能、机器学习与深度学习的区别与联系

    人工智能、机器学习与深度学习的区别与联系你是否也有这样的疑惑 人工智能 机器学习 深度学习以及监督学习等名词之间到底有什么样的联系与区别 以及它们的应用场景呢 下面就通过概念 区别和联系以及应用场景三个方面来具体的分析下他们 一 概念 1 人工智能人工智能 Artificialin 简称 AI 人工智能是计算机科学的一个分支 它企图了解智能的本质 并生产出一种新的能以人类智能相似的方式做出反应的智能机器

    2026年3月19日
    1
  • 完整的蓝屏错误代码大全详解[通俗易懂]

    完整的蓝屏错误代码大全详解[通俗易懂]完整的BSOD错误代码列表从STOP0x1到STOP0xC0000221一个死机(BSOD)的蓝屏,技术上称为一个STOP错误,若在Windows遭受了严重的错误,被迫“停”的问题。在任何Windows操作系统中都会出现BSOD错误,包括Windows10,Windows8,Windows7,WindowsVista,WindowsXP甚至Windows98/95。由于蓝屏错误让…

    2022年5月15日
    47
  • CTF流量分析常见题型(二)-USB流量

    CTF流量分析常见题型(二)-USB流量0x00前言在学习Wireshark常见使用时,对常见CTF流量分析题型和铁人三项流量分析题的部分问题进行了简单总结。由于篇幅过长,于是另起一篇总结常见流量包分析。包括USB流量包分析和一些其他流量包分析。0x01USB流量包分析USB流量指的是USB设备接口的流量,攻击者能够通过监听usb接口流量获取键盘敲击键、鼠标移动与点击、存储设备的铭文传输通信、USB无线网卡网络传输内容等等。在CTF中,USB流量分析主要以键盘和鼠标流量为主。1、键盘流量USB协议数据部分在LeftoverCapt

    2022年6月11日
    141
  • arduino 超声波测距误差较大_超声波测距的背景

    arduino 超声波测距误差较大_超声波测距的背景arduino实现超声波测距涉及模块:四线超声波测距模块,LCD1602ALCD1602连接实验代码:#include<LiquidCrystal.h>LiquidCrystallcd(12,11,5,4,3,2);constintTrigPin=7;constintEchoPin=6;floatcm;voidsetup(){lcd.begin(16,2);pinMode(TrigPin,OUTPUT);pinMode

    2025年11月24日
    2
  • Java File中renameTo的介绍和使用说明

    看到项目中有个地方用的File的renameTo这个方法,本以为这个方法就是用来文件重命名的,但是项目中确用它来进行文件的移动。就是使用renameTo将一个文件从一个目录移动另一个目录下!下面就简单介绍一下renameTo,并整理一个renameTo的使用!renameTo的介绍官方文档说明/** * 重新命名此抽象路径名表示的文件。 此方法行为的许多方面都是与平台有关的:重命名操作无法

    2022年2月26日
    44
  • Openclaw如何部署到钉钉?图文教程详解

    Openclaw如何部署到钉钉?图文教程详解

    2026年3月13日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号