Day.16 「重复的事情,交给程序去做!」 —— JavaScript 循环回圈

「重复的事情,交给程序去做!」 —— JavaScript 循环回圈

前面学习到了条件判断式,接着我们来学习有点危险循环回圈,好啦!也没那麽夸张~只是写不好,容易进入无穷回圈导致当机!不过我们是写在网页上~所以如果真的不小心陷入无穷回圈,就关掉浏览器就可以了!

什麽是回圈?

如同字面上的意思,一直反覆轮回,重复做一样的事(怎麽好像人生)。

回圈流程图

没错!回圈也有流程图,但其实也跟判断流程图相差不远,几乎一模一样

回圈流程图

同样是要达成所设定的条件来进行循环,是不是跟条件判断式很像呀!

while 回圈

while 回圈是个最基本、结构简单的回圈,使用的语法 while ( 条件表达式 ) { 当条件表达式为 true 时,执行程序码 }

假设我们要印出 12 个月份,除了乖乖的打出 12 个月份,我们也可以发挥工程师精神,使用回圈来帮我们代劳:

let month = 1; /* 一年由 1 月开始 */
while (month <= 12 /* 一年只有 12 个月,超过就终止 */) {
  console.log( `${month} 月` );  // 利用前面所学的样板字面值,带入变数
  month++;  // 重点:需要每执行一次自动 + 1,否则会陷入无限回圈
}

/*
  "1 月"
  "2 月"
  "3 月"
  "4 月"
  "5 月"
  "6 月"
  "7 月"
  "8 月"
  "9 月" 
  "10 月"
  "11 月"
  "12 月"
*/

非常简单吧~

do while 回圈

而 do while 跟 while 非常相似,唯一不同的地方就在於,JavaScript 是由上而下执行程序码,所以会先执行一次

let month = 1; /* 一年由 1 月开始 */
do {
  // 不管有没有符合条件,都会先执行"一次"这段程序码
  console.log( `${month} 月` );
  month++; // 重点记得加
} while (month <= 12) // 一年不超过 12 个月

/*
  "1 月"
  "2 月"
  "3 月"
  "4 月"
  "5 月"
  "6 月"
  "7 月"
  "8 月"
  "9 月" 
  "10 月"
  "11 月"
  "12 月"
*/

for 回圈

for 回圈比较严谨,它把设定初始值条件判断更新值 集中在一起设定,让回圈的操控次数更容易掌控。

for 回圈的语法 for (初始化表达式; 条件表达式; 更新表达式) { 条件判断为 true 执行程序码 }

同样用上面 12 个月的例子:

/* 同样设定初始值 1 月; 不超过 12 个月; 每执行一次 + 1 */
for (let i = 1; i <= 12; i++) {
  console.log( `${i} 月` );
}

/*
  "1 月"
  "2 月"
  "3 月"
  "4 月"
  "5 月"
  "6 月"
  "7 月"
  "8 月"
  "9 月" 
  "10 月"
  "11 月"
  "12 月"
*/

有没有发现更简单了!
大多数人会喜欢使用 let i 来初始化元素,是因为 let 是区块变数,不会污染到外面的变数,而 iindex 的缩写,当然你变数名取别的也无所谓就是了!

break & continue

有时候我们并不想让回圈直接执行到底,想要跳过几个选项,或到哪个选项直接停止,就可以利用 break (中断语法)与 continue (跳过语法),只能使用在循环语法中。
是不是很熟悉~没错!就是前面 switch 中的 break 语法,switch 也可以搭配 continue 进行跳过。

break 用法应该都知道了,这里就介绍 continue 吧~
使用方法也很简单,假如我想在印出 9 月有几天红字:

let holiday = 0;  // 统计假日

/* 同样设定初始值 1 日; 9 月不超过 30 天; 每执行一次 + 1 */
for (let i = 1; i <= 30; i++) {

  // 1 号是从星期三开始的,判断如果是星期一到五的话 continue 跳过
  if ( (i + 2) % 7 >= 1 && (i + 2) % 7 <= 5 ) continue;
  
  // 没被 continue 跳过的,会在这行程序码进行 + 1
  holiday++;
}

holiday += 1; // 不能忘了中秋节是在星期二

console.log(`红字有 ${holiday} 天`); // 红字有 9 天

for 回圈 与 while 回圈 的差别

就如同我上一篇所说,既然 for 回圈 和 while 回圈 使用的情况与结果都差不多,那为什麽还会存在,一定是有它的意义在!

大多数的情况,都会使用 for 回圈,是因为 for 回圈把控制回圈次数的条件都集中一起写,阅读性比较高,适合 条件次数明确 的情况使用。

而当条件次数不明确呢? 没错!就要利用 while 回圈来达成了!while 回圈在面对随机性的时候,只要条件的部分符合,不用像 for 回圈要设定好三个值,while 回圈就比 for 回圈会更加灵活好用且更直觉。

这边举一下 008 天 重新认识 JavaScript 书中很好的例子,当大乐透要使用「电脑选号」时,回圈要如何判定呢? 规则:「从 1~49中,随机选9个不重复的号码」,这就留给各位思考了。

参考资料


<<:  【从实作学习ASP.NET Core】Day13 | 後台 | 编辑与删除

>>:  【Day10】列举技术的实作 ─ DNS篇

[FGL] 程序开发(4) - 查询条件输入(QBE: Query By Example)

这个章节中,我们探讨四类查询指令中剩下的 QBE 条件输入指令 CONSTRUCT。做完条件的输入...

一Ryu大师: REST API

tags: Ryu REST API REST: Representational State Tr...

AE卷轴制作3-Day4

来到了第四天,还在第一个练习,但每天都有一点不一样的收获, 今天练习到在Shape 底下加使用Rep...

C# .WebAPI Tuple 回传空白的问题

近期将依些老程序转移至微服务上, 因为原本程序使用了大量 out 语法, 为了能够让微服务的 API...

[Day28] Vue3 - 资料绑定

纯 JS 的环境里要改变 DOM 元素,除了要找到他,还要用 setAttribute, textC...