> A photo by etienneblg on Unsplash
您真的知道简单的for循环的功能吗? 问题是您真的知道如何执行for循环吗?
对于每个开发人员每天都以无数种方式使用循环的方式,循环至关重要。 如果满足指定条件,则For循环多次执行代码块。
尽管Javascript已经包含了不同类型的循环,但是这里的主要重点将是通过许多步骤来学习基本for循环的功能。 主要目标是真正了解for循环的构造,执行和迭代阶段。
如MDN中所述,for语句创建一个循环,该循环由三个可选表达式组成,并用括号括起来并用分号分隔,然后是要在循环中执行的语句(通常为block语句)。
for循环中的第一个表达式块(块1)代表初始阶段,就在循环开始执行之前。 在此阶段,请执行提供参数声明之类的初始条件所需的一切。 传统上,您习惯于在此处初始化本地计数器变量以递增或递减,但是您所能做的还不止于此。 在此阶段可以定义任何块作用域变量。
第二个表达式块(块2)包含条件,该条件导致在计算结果为true时执行该语句。 一旦条件评估为false,执行将在for循环之后跳至以下表达式。 请注意,条件表达式可以表示为真实值和虚假值。
第三个表达式块(块3)在当前迭代结束时执行,在此阶段,您习惯于递增或递减计数器值。
如果我们可以根据其执行顺序可视化整个迭代过程,那么情况将如下所示:
步骤0是初始阶段,在for循环开始时仅执行一次。 在初始化过程之后,将按照以下顺序实现每次迭代:
步骤1是进行条件评估的地方。 如果为真,则执行该语句(步骤2)。 最终表达式仅在当前迭代的末尾求值(第3步)。 继续进行此过程,直到条件评估为虚假值为止。
步骤2是执行语句的地方。 for循环中的语句可以通过两种方式编写,一种是使用块{…}对多个语句进行分组,而后者是在for表达式之后使用单个语句。 检查以下一些方法:
如果需要,步骤3可能会包含更多操作。 可以使用Java的逗号运算符对表达式进行分组。
开发人员中的一个常见错误是不将重点放在增量/减量计数器值上,这样它就被忽略是发布还是发布。 请记住,后增量在返回值之后递增,而前增量在之前返回。
后期和前置递增/递减可在每个块中使用。 在每个循环中显示所有对应的值之后,请检查以下示例。从某种意义上来说,for循环非常强大,因为当用作单线时,整个表达式可以非常简洁。 检查以下示例,以演示使用非常短的语法可以完成多少操作。
如果我们分析上面的示例5,则每个周期的图表将反映为:
> Iteration Analysis of Example 5
既然您已经了解了for循环的基本知识及其在编写单行代码和处理复杂问题时的强大功能,那么您应该已经准备好应对软件界的一个著名问题。 Fizz Buzz问题…
实际上,正如wiki.c2.com所说,Fizz Buzz测试的统计数据表明应聘者的软件失败率为99.5%。 如果您还没有听说过这项测试,那就来了。 尝试使用自己的知识来解决它。 挑战如下:
编写一个程序,打印从1到100的数字。但是,对于三个打印数字" Fizz"(而不是数字)的倍数,以及五个打印"嗡嗡声"的倍数。 对于三个和五个的倍数的数字,请打印" FizzBuzz"。
您现在应该会感到兴奋,在这里稍事休息,然后开始编写算法…
再次欢迎您,因为wiki.c2.com链接中已经提供了解决方案,所以您应该以自己的方式来解决问题。
以下是最短的带头解决方案,请尝试理解它们。
希望您真的了解for循环的运行方式,并且从现在开始您将在另一个见解中看到这个问题。 作为软件开发人员,我们确实必须了解for循环背后的逻辑,因为它们是我们日常编写程序的基本构建块。
(本文翻译自Abdullah Sunça的文章《Mystery of For Loops in Javascript》,参考:)