正如人需要重复呼吸。在程序中,多数时候都与「重复进行某动作」有关,而这,就是回圈。视执行次数、过程与结果,还可分为「递增」与「递减」两种情形。
举例来说,若不使用回圈,要印出英文字母A~Z,就必须逐行逐句:
console.log(A);
console.log(B);
console.log(C);
console.log(D);
//中略
console.log(Z);
for回圈是最常见的回圈类型,其结构为:
for (初始值; 继续循环的条件; 每回合在 { } 做的事)
举例来说,一个「初始值为3,值小於10之前继续循环,每次回圈加1」的回圈,可以写成:
var x;
for (var x = 3; x < 10; x++){
console.log(x) //印出结果
}
然而,回圈不总是单纯的,若遇到乘法的情形,就会需要双回圈。
在双回圈中:
在下例中,双回圈会依序得出此结果:
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 = 01 * 0 = 0
1 * 1 = 1
1 * 2 = 22 * 0 = 0
2 * 1 = 2
2 * 2 = 43 * 0 = 0
3 * 1 = 3
3 * 2 = 64 * 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(条件) {
条件为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回圈只拥有「条件」可资控制流程。
>>: 谁比谁长,回圈和 reduce 用法,Ruby 30 天刷题修行篇第十话
为甚麽 「需要」 Kubernetes? 一个走完开发流程之後所产出的软件应用程序(或称系统),都会...
响应式网页设计是什麽 响应式网页设计(Responsive Web Design)简称RWD,是开发...
如果你不知道这个系列为什麽叫这种激烈的名字可以看这篇: Day [0] — JS之浸猪笼系列 如果你...
-安全和隐私控制系列(来源:NIST SP 800-53 R5) .安全和隐私控制有效性解决了正确...
上一篇Day 29 - 开发流程(上) 瀑布式(Waterfall Model) & 敏捷式...