这是我的第一篇掘金博客,开启掘金写作之路。
流程控制
流程控制:就是控制代码按照一定的结构顺序来执行。
流程控制主要有三种结构,分别是顺序结构、分支结构和循环结构,代表三种代码执行的顺序。
一:分支结构
单分支语句
-
单分支if(如果条件成立就进入到代码块里面)
if(条件语句){ 执行语句; //条件成立执行的代码语句 }
双分支语句
-
双分支if else (如果条件成立进入if的代码块,如果不成立进入到else代码块)
if(条件语句){ [成立]执行条件; }else{ [不成立]执行条件; }
多分支 if else if
-
多分支(如果可以书写多个判断条件,进入了一个条件就不会再进其他的条件了)
if(条件1){ 执行相应代码; }else if(条件2){ 执行相应代码; }else if(条件3){ 执行相应代码; }else{ //上述条件都不成立执行此处代码 }
多分支 switch
-
switch:利用switch括号后的值跟后面case后的值做匹配,匹配上就执行case下面对应的语句,如果没匹配上就执行default(默认)里面的语句。
switch (表达式) { /*表达式一般是常量*/ case value1: 执行语句1; break; case value2: 执行语句2; break; case value3: 执行语句3; break; default: 执行默认语句; }- switch表达式一般是常量;
- 表达式的值和case的值执行的是全等匹配,必须数据类型一样才能匹配上;
- case后面必须跟break才能退出,否则继续执行下去;
- default根据需求来写,可以不写;
月份多选择,小实例:
//输入月份 const readline = require('readline-sync'); console.log('请输入1-12之间的月份'); let yue = readline.question() - 0; switch (yue) { case 1: case 2: case 3: console.log('这是春天'); break; case 4: case 5: case 6: console.log('这是夏天'); break; case 7: case 8: case 9: console.log('这是秋天'); break; case 10: case 11: case 12: console.log('这是冬天'); break; default: console.log('你输入的月份错误'); }
switch语句和if else if语句的区别
- 一般情况下,他们两个语句可以相互替换
- swich....case语句通常处理case为比较确定值的情况,而if....else....语句更加灵活,常常用于范围判断(大于,小于,等于某个范围)
- switch语句进行条件判断后直接执行到程序的条件语句,效率更高。而if.....else语句有几种条件,就得判断多少次
- 当分支比较少时,if.....else语句的执行效率比switch语句高
- 当分支比较多时,switch语句的执行效率比较高,而且结构更清晰。
二:顺序结构
- 顺序结构:按照代码的先后顺序,依次执行。
三:循环结构
-
for循环
for(初始化变量;条件表达式;操作表达式){ //循环体 }名称 作用 初始化变量 通常被用于初始化一个计数器,该表达式可以使用 var 关键字声明新的变量,这个变量帮我们来记录次数。 条件表达式 用于确定每一次循环是否能被执行。如果结果是 true 就继续循环,否则退出循环。 操作表达式 用于确定每一次循环是否能被执行。如果结果是 true 就继续循环,否则退出循环。 初始化变操作在整个for循环只会执行一次
执行过程:
- 执行操作表达式,此时第一轮结束。
- 第二轮开始,直接去执行条件表达式(不再初始胡变量),如果为true,则去执行循环体语句,否则退出循环。
- 继续执行操作表达式,第二轮结束。
- 后续跟第二轮一致,直至条件表达式为假,结束整个for循环。
断点调试:
断点调试是指自己在程序的某一行设置一个断点,调试时,程序运行到这一行就会停住,然后你可以一步一步往下调试,调试过程中可以看各个变量当前的值,出错的化,调试到出错的代码立即显示错误,停下。断点调试可以帮助观察程序运行的过程。
断点调试的流程:
- 浏览器中按F12--->sources--->找到需要调试的文件---->在程序的某一行设置断点。
- watch:监视,通过watch可以监视变量的值得变化,非常的常用。
- 按下F11,程序单步执行,让程序一行一行的执行,这个时候,观察watch中的变量的值的变化。
for循环出重复相同的代码:
const readline = require('readline-sync'); //基本写法 for(let i=0;i<=10;i++){ console.log('霓虹呀'); } //用户输入次数 console.log('用户输入次数:'); let sum = readline.question(); for(let i=1;i<=sum;i++){ console.log('哇哦哇哦哇哦'); }for循环出不重复的代码:
// for循环出不重复的代码: for(let i=0;i<=100;i++){ console.log('今年'+i+'岁'); }for双重循环:是指在一个循环语句中再定义一个循环语句的语法结构,例如在一个for循环语句中再嵌套一个for循环。
for(外循环的初始;外循环的条件;外循环的操作表达式){ for(内循环的初始;内循环的条件;内循环的操作表达式){ 需执行的代码; } }-
内循环可以看作外层循环的循环体语句
-
内层循环执行的顺序也要遵循for循环的执行顺序
-
外层循环执行一次,内层循环要执行全部次数
打印5行5列五角星
let str=''; for(let i=0;i<5;i++){ //外层循环负责打印5行 for(let j=0;j<5;j++){ //内层循环负责一行打印5个星星 str += '★'; } //每次满5个星星就加一次换行 str += '\n'; } console.log(str);
for循环小节
- for循环可以重复执行某些相同的代码
- for循环可以重复执行些许不同的代码
- for循环可以重复执行某些操作,比如算数运算符加减法操作
- 随着需求增加,双重for循环可以做更多,更好看的效果
- 双重for循环,外层循环一次,内层for循环全部执行
- for循环是循环条件和数字直接相关的循环
-
while循环
while(条件表达式){ //循环体代码 }执行思路:
- 先执行条件表达式,如果结果为true,则执行循环体代码;如果为false,则退出循环,执行后面代码
- 执行循环体代码
- 循环体代码执行完毕后,程序会继续判断执行条件表达式,如果条件仍为true,则会继续执行循环体,知道循环条件为false时,整个循环过程才会结束
注意:
使用while循环时一定要注意,它必须要有退出的条件,否则会成为死循环
-
do while循环
do{ //循环体代码-条件表达式为true时重复执行循环体代码 }while(条件表达式);执行思路
- 先执行一次循环体代码
- 再执行条件表达式,如果结果为true,则继续执行循环体代码,如果为false,则退出循环,继续执行后面的代码
注意:先再执行循环体,再判断,do.....while循环体语句至少会执行一次循环体代码
-
continue,break
continue:关键字用于立即跳出本次循环,继续下一次循环
例如:吃5个包子,第3个有虫子,就扔掉第3个,继续吃第4个第5个包子,其代码实现如下:
for (var i = 1; i <= 5; i++) { if (i == 3) { console.log('这个包子有虫子,扔掉'); continue; // 跳出本次循环,跳出的是第3次循环 } console.log('我正在吃第' + i + '个包子呢'); }break:关键字用于立即跳出整个循环(循环结束)
例如:吃5个包子,吃到第3个发现里面有半个虫子,其余的不吃了,其代码实现如下:
for (var i = 1; i <= 5; i++) { if (i == 3) { break; // 直接退出整个for 循环,跳到整个for下面的语句 } console.log('我正在吃第' + i + '个包子呢'); }
\