Day-10 回圈

正如人需要重复呼吸。在程序中,多数时候都与「重复进行某动作」有关,而这,就是回圈。视执行次数、过程与结果,还可分为「递增」与「递减」两种情形。

举例来说,若不使用回圈,要印出英文字母A~Z,就必须逐行逐句:

console.log(A);
console.log(B);
console.log(C);
console.log(D);
//中略
console.log(Z);

for回圈

for回圈是最常见的回圈类型,其结构为:

for (初始值; 继续循环的条件; 每回合在 { } 做的事)

举例来说,一个「初始值为3,值小於10之前继续循环,每次回圈加1」的回圈,可以写成:

var x;

for (var x = 3; x < 10; x++){
    console.log(x) //印出结果
}

然而,回圈不总是单纯的,若遇到乘法的情形,就会需要双回圈。
在双回圈中:

  1. 程序会先满足「外」回圈的条件
  2. 再进入「内」回圈做判断,直到不满足条件为止。
  3. 回到「外」回圈做「每回合做的事」,若满足条件则立刻再进入内回圈。
  4. 反之亦然。

在下例中,双回圈会依序得出此结果:
0、0、0、0、1、2、0、2、4、0、3、6、0、4、8

for (var i = 0; i < 5 ; i = i + 1) {
  for (var j = 0; j < 3; j = j + 1) {
    console.log(i * j)
  }
}

在乘法计算中,「外」回圈成为「被乘数」(依回圈条件转出0~4),而为「内」回圈成了「乘数」(依回圈条件转出0~2)。所以其实际计算了:

0 * 0 = 0
0 * 1 = 0
0 * 2 = 0

1 * 0 = 0
1 * 1 = 1
1 * 2 = 2

2 * 0 = 0
2 * 1 = 2
2 * 2 = 4

3 * 0 = 0
3 * 1 = 3
3 * 2 = 6

4 * 0 = 0
4 * 1 = 4
4 * 2 = 8

依此,可再运用for回圈写出九九乘法:

for (var i = 1; i <= 9 ; i = i + 1) {
  for (var j = 1; j <= 9; j = j + 1) {
    console.log(`${i} x ${j} = ${i * j}`)
  }
}

while回圈

while回圈也是常用的回圈类型,其结构为:

宣告初始值
while(条件) {
条件为true时执行的动作
}

举例来说,一个「初始值为3,值小於10之前继续循环,每次回圈加1」的回圈,可以写成:

var x = 3;

while (x < 10){
    console.log(x); //印出结果
    x++; //转一圈x加1
}

可以发现,while(当...如何如何时)回圈可以用更简单的语意,达成与for回圈相同的效果。另一个相同之处,是一定要设定「明确的结束条件」,否则会变成无限回圈,不断执行直到吃光资源,当机......

回圈的停止及比较

一个完整的回圈,在满足「明确的结束条件」後,即会停止。若想提早结束,或跳过其中几次回圈,就必须使用特殊的方法。这些方法,就是「break」与「continue」。

使用 break 会立即结束回圈。例如:

var result = 0;
for (var x = 1; x <= 100; x++) {
    result += x //就是 result = result + x 的意思
    if (result >1000) {break;} //结果合计超过1000时,停止
}
console.log(x) //印出合计超过1000的值,是45

使用 continue 会跳过本次回圈,继续下一次的。例如:

var result = 0;
for (var y = 1; y < 100; y++) {
    if (y % 2 === 0) {continue} //若y为偶数,就跳过(只挑出奇数相加)
}
console.log(result) //印出1到100之间的奇数相加,结果是2500

在多数情况下,for与while没有显着不同,都是回圈,但使用情境有些微出入:

  • for回圈,大多用在「执行次数明确」的情境
  • while回圈,大多用在「执行次数『不』明确」的情境

此一出入,源於两者结构的根本差异。如前所述,for回圈拥有「初始值、满足条件、每回合做的事」三个部份,而while回圈只拥有「条件」可资控制流程。


<<:  [DAY 10] AWS RDS

>>:  谁比谁长,回圈和 reduce 用法,Ruby 30 天刷题修行篇第十话

[Day 02] 为什麽要用 Kubernetes?

为甚麽 「需要」 Kubernetes? 一个走完开发流程之後所产出的软件应用程序(或称系统),都会...

制作响应式网站-30天学会HTML+CSS,制作精美网站

响应式网页设计是什麽 响应式网页设计(Responsive Web Design)简称RWD,是开发...

Day [3] — this:建构物件 — JS之浸猪笼系列

如果你不知道这个系列为什麽叫这种激烈的名字可以看这篇: Day [0] — JS之浸猪笼系列 如果你...

NIST SP 800-53 R5的摘要

-安全和隐私控制系列(来源:NIST SP 800-53 R5) .安全和隐私控制有效性解决了正确...

Day 30 - 开发流程(下) Web 开发流程 & 铁人赛心得

上一篇Day 29 - 开发流程(上) 瀑布式(Waterfall Model) & 敏捷式...