For 循环是什么?GenAI LIVE!| 2025 年 6 月 4 日

2025-06-10

For 循环是什么?

GenAI LIVE! | 2025年6月4日

从热门面试问题中学习

这是另一篇有关我在求职过程中遇到的技术面试问题以及如何解决这些问题的帖子(更多帖子请参见此处此处此处)。

今天的问题很简单,但正确答案却触及了大多数语言中非常流行的功能的基本原理;它如此流行,以至于我们几乎从未考虑过它。

问题如下:编写一个函数,打印所有 20 以内的奇数。

听起来很简单,对吧?任何初学者都会告诉你,这是一个循环的工作for。那么,让我们把它写出来:

for(let i=0; i<=20; i++){
  if(i%2===1){
    console.log(i)
  }
} 
Enter fullscreen mode Exit fullscreen mode

用(过于)简化的英语来说:我们运行一个循环 20 次,在循环的每次迭代中,我们检查变量的值是否i为奇数,如果是,我们就将其打印到控制台。

上述函数满足了需求。如果你在控制台中运行它,你会看到它完成了任务。问题是,有没有更好的方法呢?

For 循环是什么?

注意:有关 JavaScript for 循环的更多信息,请参阅W3Schools 上的文档

显然,有(否则这篇博文就没有意义了);为了理解如何做到这一点,让我们仔细看看循环的语法for,更具体地说,第一行:

for(let i=0; i<20; i++){
Enter fullscreen mode Exit fullscreen mode

我们可以看到,for循环接受三个以 ' 分隔的语句作为参数;。让我们仔细看看它们。

第一条语句是一个表达式,在循环执行之前只运行一次for。它通常用于初始化计数器,但您可以输入任何有效的 JavaScript 表达式,或者根本不输入任何表达式(例如,如果您已经在 for 循环之外初始化了计数器)。在上面的示例中,第一条语句定义了一个变量i并将其值设置为0

第二个语句是一个条件语句,在循环每次迭代之前都会进行求值。只要条件语句求值为 ,true循环就会继续运行。一旦条件发生变化,使第二个语句求值为false,我们就会跳出循环。在我们的例子中,条件语句为 ,i < 20因此只要 的值i低于,循环就会一直运行20

第三条语句是另一个表达式。此表达式在循环的每次迭代后运行。它通常用于增加计数器,但同样,您可以在其中输入任何合法的 JavaScript 代码,它都会运行(当然,如果您不使用它来增加计数器,则需要确保有其他方法将第二条语句中的条件更改为 true,否则您将陷入可怕的无限循环)。

从埃舍尔的无限楼梯上滚下来的人

在我们前面的例子中,我们使用第三个语句在每次迭代后增加的值i,这样经过 20 次迭代后i等于20i < 20计算结果为true,然后我们跳出循环。

我们可以做得更好

现在让我们看一下我们的功能并看看如何优化它。

回顾一下这个函数:

for(let i=0; i<=20; i++){
  if(i%2===1){
    console.log(i)
  }
}
Enter fullscreen mode Exit fullscreen mode

因此,我们将 的值设置i为零并开始循环。在循环的每次迭代中,我们检查 的当前值i,如果是奇数,则将其打印到控制台,然后将其加i1 并重新运行循环,直到i达到 20 时,终止循环。

我们如何才能优化这一点?

关键在于第三条语句。如前所述,在第三条语句中,没有任何强制要求我们将计数器加 1;我们可以做任何想做的事情。结合这一点,以及 1 是奇数,并且奇数加 2 也返回奇数的事实,最终得到的循环只需要执行上次尝试所用迭代次数的一半。

尝试将以下内容放入控制台并查看其运行情况:

for(let i=1; i<=20; i +=2 ){
  console.log(i)
}
Enter fullscreen mode Exit fullscreen mode

该函数与前一个函数的区别在于,这里我们将的初始值设置为,i并且1不是i在每次迭代时增加一,而是将其增加二(我们也摆脱了if语句,因为我们知道现在总是奇数,所以我们只是记录每次i的值而不检查)。i

因此,我们看到,当我们想要以超出通常使用方式的方式调整事物时,了解事物内部的工作原理有时可以帮助我们。

我希望这篇文章能够激励你更深入地探究,甚至探究“每个人都知道”的概念。

编码愉快!


本文转载自我的博客“Rabbi On Rails”
你可以在那里阅读更多我的编程历程,或者在 Twitter 上关注我@yechielk。

鏂囩珷鏉ユ簮锛�https://dev.to/yechielk/what-the-for-loop-4pam
PREV
编写您的第一个浏览器扩展教程 - 第 2 部分
NEXT
作为开发人员你应该学习的三项技能(另加一项)