首页 > 其他分享 >03. 流程控制

03. 流程控制

时间:2023-01-14 21:35:29浏览次数:34  
标签:语句 03 循环体 控制 流程 break case 循环 执行

一、流程控制

  流程控制就是用来控制程序运行中各语句执行顺序的语句。基本的流程结构为:顺序结构,分支结构(或称选择结构),循环结构。

  • 顺序结构:程序自上到下执行,中间没有任何判断和跳转;
  • 分支结构:根据条件,选择性的执行某段代码;
  • 循环结构:根据循环条件,重复性的执行某段代码;

二、顺序结构

  顺序结构是程序默认的执行流程,按照代码的先后顺序,从上到下依次执行;

三、分支结构

  选择语句也被称为分支语句,它通过给定的条件进行判断,从而决定执行两个或者多个分支中哪一只。因此,在编写选择语句之前,应该首先明确判断条件是什么,并确定判断结果为“真”或“假”时应分别执行什么样的操作/算法。在 JS 语言中选择语句主要提供了两种,一个是 if 语句,另一个则是 switch 语句。

3.1、if语句

3.1.1、if语句的第一种格式

if(条件表达式){
    语句体;
}

  执行流程

  1. 首先计算条件表达式的值
  2. 如果关系表达式的值为 true 就执行语句体
  3. 如果关系表达式的值为 false 就不执行语句体
  4. 继续执行后面的其它语句
let a = 20;
if(a > 10){
    alert('a > 10');
}

if 语句默认只会控制紧随其后的那一行代码,如果希望可以控制多行代码,可以使用 {} 将语句扩起来;

如果 if 后添加的表达式不是布尔值,会转换为布尔值然后再运算;

3.1.2、if语句的第二种格式

if(条件表达式){
    语句体1;
} else {
    语句体2;
}

  执行流程

  1. 首先计算条件表达式的值
  2. 如果关系表达式的值为 true 就执行语句体1
  3. 如果关系表达式的值为 false 就执行语句体2
  4. 继续执行后面的其它语句
let a = 10;

if(a > 10){
    alert('a > 10');
} else {
    alert('a <= 10')
}

3.1.3、if语句的第三种格式

if(条件表达式1){
    语句体1;
} else if (条件表达式2){
    语句体2;
} 
……
else {
    语句体n+1;
}

  执行流程

  1. 首先计算 条件表达式1 的值
  2. 如果为 true 就执行语句体1;如果为 false 就计算 条件表达式2 的值
  3. 如果为 true 就执行语句体2;如果为 false 就计算 条件表达式3 的值
  4. ……
  5. 如果所有的条件表达式结果都为 false,就执行 else 子句中的语句体n+1
let a = 10;

if(a > 10){
    alert('a > 10');
} else if(a = 10) {
    alert('a = 10');
} else {
    alert('a < 10');
}

else 结构是可选的;

如果多个条件表达式之间是“互斥”关系,哪个判断和执行语句声明在上面还是下面,无所谓;

如果多个条件表达式之间有“交集”关系,需根据实际情况,考虑清除应该将哪个结构写在上面;

如果多个条件表达式之间有包含关系,通常情况下,需要将范围小的声明在范围大的上面。否则,范围小的没机会执行;

3.2、switch语句

switch(表达式){
case 常量1:
    语句体1;
    break;
case 常量2:
    语句体2;
    break;   
……
case 常量n:
    语句体n;
    break;  
default:
    语句体n+1;
    break;
}

  执行流程

  1. 首先计算表达式的值
  2. 依次和 case 后面的值进行全等比较,如果比较结果为 true,则自当前 case 处开始执行代码,在执行过程中,遇到 break 就会结束
  3. 如果所有的 case 后面的值和表达式的值都不匹配,就会执行 default 里面的语句体,然后结束整个 switch 语句

  格式说明

  • case:后面跟的是要和表达式进行比较的值(被匹配的值),case 之后只能声明字面量,不能声明变量和范围,且 case 给出的值不能重复
  • break:表示中断,结束的意思,用来结束 switch 语句,break 关键字是可选的
  • default:表示所有情况都不匹配的时候,就执行该处的内容,相当于 if……else 中的 else,default 结构是可选的,而且位置是灵活的;

  如果在语句体中没有写 break 关键字,可能会导致 case穿透现象;case穿透现象的执行流程如下:首先还是会拿着小括号中表达式的值跟下面的每一个 case 进行匹配,如果匹配上了,就会执行相应的代码,如果此时发现了 break,那么结束整个 switch 语句。如果没有发现 break,那么程序会继续执行下一个 case 语句体,一直遇到 break 或者 右大括号为止;

// prompt() 可以用来获取用户输入的内容
let a = +prompt('请输入星期:');

switch(a){
    case 1:
        alert('星期一');
        break;
    case 2:
        alert('星期二');
        break;
    case 3:
        alert('星期三');
        break;
    case 4:
        alert('星期四');
        break;
    case 5:
        alert('星期五');
        break;
    case 6:
        alert('星期六');
        break;
    case 7:
        alert('星期七');
        break;
    default:
        alert('输入有误');
        break;
}

四、循环结构

  循环就是重复的做某件事情;它具有明确的开始和停止标志;一组被重复执行的语句称之为 循环体,能否继续执行,取决于循环的终止条件。在 JS 中循环分为 for循环、while循环、do..while循环;循环结构具有以下四个组成部分:

  • 初始化部分(init_statement)
  • 循环条件部分(test_exp) --> 布尔类型
  • 循环体部分(body_statement)
  • 迭代部分(alter_statement)

  通常情况下,循环结构都是因为②中循环条件返回false;

4.1、for循环

for(①初始化条件;②循环条件;④迭代条件){
    ③循环体;
}

  执行流程

  1. 执行初始化语句
  2. 执行条件判断语句,看其结果是 true 还是 false
    • 如果是 false,循环结束
    • 如果是 true,执行循环体语句
  3. 执行条件控制语句
  4. 回到②继续执行条件判断语句
for(let i = 0;i < 10;i++){
    console.log(i);
}

初始化语句作为循环的开始,只会执行一次;

如果判断条件为 true,则循环继续;如果判断语句为 false,则循环结束;

使用 let 在 for 循环的初始化语句中声明的变量是局部变量,只能在 for 循环中内部访问;

使用 var 在 for 循环的初始化语句中声明的变量是全局变量,可以在 for 循环的外部访问;

4.2、while循环

①初始化条件;
while(②循环条件){
    ③循环体;
    ④迭代条件;
}

  执行流程

  1. 执行初始化语句
  2. 执行条件判断语句,看其结果是 true 还是 false
    • 如果是 false,循环结束
    • 如果是 true,执行循环体语句
  3. 执行条件控制语句
  4. 回到②继续执行条件判断语句
let i = 0;

while(i < 10){
    console.log(i);
    i++;
}

初始化语句作为循环的开始,只会执行一次;

如果判断条件为 true,则循环继续;如果判断语句为 false,则循环结束;

for 循环和 while 循环可以相互转换的;

4.3、do...while循环

①初始化条件
do{
    ③循环体;
    ④迭代条件;
}while(②循环条件);

  执行流程

  1. 执行初始化语句
  2. 执行循环体语句
  3. 执行条件控制语句
  4. 执行条件判断语句,看其结果是 true 还是 false
    • 如果是 false,循环结束
    • 如果是 true,执行循环体语句
  5. 执行条件控制语句
  6. 回到④继续执行条件判断语句
let i = 0;

do {
    console.log(i);
    i++;
}while(i < 10);

do...while循环先执行后判断,即循环体至少执行一次;

4.4、无限循环

  for 循环的无限循环:

for(;;){
    循环体;
}

  while 循环的无限循环:

whie(true){
    循环体;
}

  do...while 循环的无限循环

do{
    循环体;
} while(true);

4.5、嵌套循环

  将一个循环结构A声明在另一个循环结构B的循环体,就构成了嵌套循环;

  • 外层循环:循环结构B,控制行数
  • 内层循环:循环结构A,控制列数

  内层结构遍历一遍,相当于外层循环循环体执行一次;假设外层循环需要执行 m 次,内层循环需要执行 n 次。此时内层循环的循环体一共执行了 m*n 次;

for (let i = 1; i <= 9; i++) {
    for (let j = 1; j <= i; j++) {
        document.write(j + "*" + i + " = " + i*j + " ");
    }
    document.write('<br>');
}

4.6、break与continue的使用

  • break:结束当前循环,后面不能直接写执行语句,默认跳出包裹此关键字最近的一层循环,支持标签,可以结束指定标识的循环;
  • continue:结束当次循环,后面不能直接写执行语句,默认结束包裹此关键字最近的循环的一次,支持标签,可以结束指定循环的当次循环;
for (let i = 0; i < 5; i++) {
    if(i == 3){ break; }
    console.log(i)
}
for (let i = 0; i < 5; i++) {
    if(i == 3){ continue; }
    console.log(i);
}

标签:语句,03,循环体,控制,流程,break,case,循环,执行
From: https://www.cnblogs.com/nanoha/p/17052583.html

相关文章