Web/04-JavaScript基础/08-流程控制语句:循环结构(for和while).md

525 lines
9.8 KiB
JavaScript
Raw Normal View History

2018-12-27 14:10:05 +08:00
2018-12-29 13:14:57 +08:00
## 前言
循环语句通过循环语句可以反复的执行一段代码多次
2018-12-29 14:23:51 +08:00
## for循环
2018-12-29 13:14:57 +08:00
2018-12-29 14:23:51 +08:00
### for循环的语法
2018-12-29 13:14:57 +08:00
2018-12-29 14:23:51 +08:00
语法
```
2019-12-06 21:19:48 +08:00
for(①初始化表达式; ②条件表达式; ④更新表达式){
③语句...
}
2018-12-29 14:23:51 +08:00
```
执行流程
```
2019-12-06 21:19:48 +08:00
①执行初始化表达式初始化变量初始化表达式只会执行一次
2018-12-29 14:23:51 +08:00
2019-12-06 21:19:48 +08:00
②执行条件表达式判断是否执行循环
如果为true则执行循环③
如果为false终止循环
2018-12-29 14:23:51 +08:00
2019-12-06 21:19:48 +08:00
④执行更新表达式更新表达式执行完毕继续重复②
2018-12-29 14:23:51 +08:00
```
2018-12-29 13:14:57 +08:00
2018-12-27 14:10:05 +08:00
for循环举例
```javascript
2019-12-06 21:19:48 +08:00
for (var i = 1; i <= 100; i++) {
console.log(i);
}
2018-12-27 14:10:05 +08:00
```
上方代码的解释
2019-12-06 21:19:48 +08:00
![](http://img.smyhvae.com/20180117_2248_2.png)
2018-12-27 14:10:05 +08:00
2018-12-29 14:23:51 +08:00
### for循环举例
2018-12-27 14:10:05 +08:00
```javascript
2019-12-06 21:19:48 +08:00
for (var i = 1; i < 13; i = i + 4) {
console.log(i);
}
2018-12-27 14:10:05 +08:00
```
上方代码的遍历步骤
```
程序一运行将执行var i = 1;这条语句 所以i的值是1
然后程序会验证一下i < 13是否满足1<13是真所以执行一次循环体就是大括号里面的语句
执行完循环体之后会执行i=i+4这条语句所以i的值是5
程序会会验证一下i < 13是否满足5<13是真所以执行一次循环体就是大括号里面的语句
执行完循环体之后会执行i=i+4这条语句所以i的值是9
程序会会验证一下i < 13是否满足9<13是真所以执行一次循环体就是大括号里面的语句
执行完循环体之后会执行i=i+4这条语句所以i的值是13
程序会会验证一下i < 13是否满足13<13是假所以不执行循环体了将退出循环
最终输出输出结果为159
```
接下来做几个题目
2018-12-29 14:23:51 +08:00
**题目1**
2018-12-27 14:10:05 +08:00
```javascript
2019-12-06 21:19:48 +08:00
for (var i = 1; i < 10; i = i + 3) {
i = i + 1;
console.log(i);
}
2018-12-27 14:10:05 +08:00
```
输出结果2610
2018-12-29 14:23:51 +08:00
**题目2**
2018-12-27 14:10:05 +08:00
```javascript
2019-12-06 21:19:48 +08:00
for (var i = 1; i <= 10; i++) {
2018-12-27 14:10:05 +08:00
2019-12-06 21:19:48 +08:00
}
console.log(i);
2018-12-27 14:10:05 +08:00
```
输出结果11
2018-12-29 14:23:51 +08:00
**题目3**
2018-12-27 14:10:05 +08:00
```javascript
2019-12-06 21:19:48 +08:00
for(var i = 1; i < 7; i = i + 3){
2018-12-27 14:10:05 +08:00
2019-12-06 21:19:48 +08:00
}
console.log(i);
2018-12-27 14:10:05 +08:00
```
输出结果7
2018-12-29 14:23:51 +08:00
**题目4**
2018-12-27 14:10:05 +08:00
```javascript
2019-12-06 21:19:48 +08:00
for (var i = 1; i > 0; i++) {
console.log(i);
}
2018-12-27 14:10:05 +08:00
```
死循环
2018-12-29 13:14:57 +08:00
## while循环语句
### while循环
语法
```javascript
while(条件表达式){
语句...
}
```
执行流程
```
while语句在执行时先对条件表达式进行求值判断
如果值为true则执行循环体
循环体执行完毕以后继续对表达式进行判断
如果为true则继续执行循环体以此类推
如果值为false则终止循环
```
**如果有必要的话我们可以使用 break 来终止循环**
### do...while循环
语法
```javascript
2019-12-06 21:19:48 +08:00
do{
语句...
}while(条件表达式)
2018-12-29 13:14:57 +08:00
```
2019-12-06 21:19:48 +08:00
2018-12-29 13:14:57 +08:00
执行流程
```
2019-12-06 21:19:48 +08:00
do...while语句在执行时会先执行循环体
2018-12-29 13:14:57 +08:00
2019-12-06 21:19:48 +08:00
循环体执行完毕以后在对while后的条件表达式进行判断
如果结果为true则继续执行循环体执行完毕继续判断以此类推
如果结果为false则终止循环
2018-12-29 13:14:57 +08:00
```
### while循环和 do...while循环的区别
这两个语句的功能类似不同的是
- while是先判断后执行而do...while是先执行后判断
也就是说do...while可以保证循环体至少执行一次而while不能
2018-12-29 14:23:51 +08:00
### while循环举例
2018-12-29 13:14:57 +08:00
**题目**假如投资的年利率为5%试求从1000块增长到5000块需要花费多少年
**代码实现**
```html
<!DOCTYPE html>
<html lang="">
<head>
<meta>
<meta>
<meta>
<title>Document</title>
</head>
<body>
<script>
/*
* 假如投资的年利率为5%试求从1000块增长到5000块需要花费多少年
*
* 1000 1000*1.05
* 1050 1050*1.05
*/
//定义一个变量,表示当前的钱数
var money = 1000;
//定义一个计数器
var count = 0;
//定义一个while循环来计算每年的钱数
while (money < 5000) {
money *= 1.05;
//使count自增
count++;
}
console.log(money);
console.log("一共需要" + count + "年");
</script>
</body>
</html>
```
打印结果
```
2019-12-06 21:19:48 +08:00
5003.18854203379
2018-12-29 13:14:57 +08:00
2019-12-06 21:19:48 +08:00
一共需要33年
2018-12-29 13:14:57 +08:00
```
另外你也可以自己算一下假如投资的年利率为5%从1000块增长到1万块需要花费48年
```
10401.269646942128
一共需要48年
```
2018-12-29 14:23:51 +08:00
## break continue
> 这个知识点非常重要
### break
2019-12-06 21:19:48 +08:00
- break可以用来退出switch语句或退出**整个**循环语句循环语句包括for循环while循环不包括ifif里不能用 break continue否则会报错
- break会立即终止离它**最近**的那个循环语句
- 可以为循环语句创建一个label来标识当前的循环格式label:循环语句使用break语句时可以在break后跟着一个label这样break将会结束指定的循环而不是最近的
**举例1**通过 break 终止循环语句
```javascript
2019-12-06 21:19:48 +08:00
for (var i = 0; i < 5; i++) {
console.log('i的值:' + i);
if (i == 2) {
break; // 注意,虽然在 if 里 使用了 break但这里的 break 是服务于外面的 for 循环。
}
2019-12-06 21:19:48 +08:00
}
```
2019-12-06 21:19:48 +08:00
打印结果
```
i的值:0
i的值:1
i的值:2
```
**举例2**label的使用
```javascript
2019-12-06 21:19:48 +08:00
outer:
for (var i = 0; i < 5; i++) {
console.log("外层循环 i 的值:" + i)
for (var j = 0; j < 5; j++) {
break outer; // 直接跳出outer所在的外层循环这个outer是我自定义的label
console.log("内层循环 j 的值:" + j);
}
2019-12-06 21:19:48 +08:00
}
```
打印结果
```
外层循环 i 的值0
```
### continue
2019-12-13 15:17:12 +08:00
- continue可以用来跳过**当次**循环继续下一次循环
- 同样continue默认只会离他**最近**的循环起作用
2019-12-06 21:19:48 +08:00
举例
```javascript
for (var i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue;
}
console.log('i的值:' + i);
}
```
2019-12-06 21:19:48 +08:00
打印结果
2019-12-06 21:19:48 +08:00
```
i的值:1
2018-12-29 14:23:51 +08:00
2019-12-06 21:19:48 +08:00
i的值:3
i的值:5
i的值:7
i的值:9
```
## 各种练习
2018-12-29 14:23:51 +08:00
### 练习一质数相关
2018-12-29 14:23:51 +08:00
**题目**在页面中接收一个用户输入的数字并判断该数是否是质数
代码实现
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
/*
质数只能被1和它自身整除的数1不是质数也不是合数质数必须是大于1的自然数
*/
var num = prompt("请输入一个大于1的整数:");
//判断这个值是否合法
if (num <= 1) {
alert("该值不合法!");
} else {
//先用flag标志位来保存当前的数的状态
//默认当前num是质数
var flag = true;
//判断num是否是质数
//获取2-num之间的数
for (var i = 2; i < num; i++) {
//console.log(i);
//判断num是否能被i整除
if (num % i == 0) {
2019-12-26 17:58:53 +08:00
//一旦发现如果num能被i整除则说明num一定不是质数
//此时设置flag为false然后跳出 for 循环
2018-12-29 14:23:51 +08:00
flag = false;
2019-12-26 17:58:53 +08:00
break;
2018-12-29 14:23:51 +08:00
}
}
//如果num是质数则输出
if (flag) {
alert(num + "是质数!!!");
} else {
alert("这个不是质数")
}
}
</script>
</head>
<body>
</body>
</html>
```
### 练习二质数相关
2018-12-29 14:23:51 +08:00
**题目**打印1~100之间的所有质数
代码实现
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
/*
* 打印出1-100之间所有的质数
*/
//打印2-100之间所有的数
for (var i = 2; i <= 100; i++) {
//创建一个布尔值用来保存结果默认i是质数
var flag = true;
//判断i是否是质数
//获取到2-i之间的所有的数
for (var j = 2; j < i; j++) {
//判断i是否能被j整除
if (i % j == 0) {
//如果进入判断则证明i不是质数,修改flag值为false
flag = false;
}
}
//如果是质数则打印i的值
if (flag) {
console.log(i);
}
}
</script>
</head>
<body>
</body>
</html>
```
打印结果
![](http://img.smyhvae.com/20181229_1415.png)
2018-12-29 13:14:57 +08:00
### 练习三99乘法表
2018-12-29 13:14:57 +08:00
代码实现
2018-12-29 13:14:57 +08:00
```html
<!DOCTYPE html>
<html>
2018-12-29 13:14:57 +08:00
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
body {
width: 2000px;
}
2018-12-29 13:14:57 +08:00
span {
display: inline-block;
width: 80px;
}
</style>
<script type="text/javascript">
2018-12-29 13:14:57 +08:00
/*
* 1.打印99乘法表
* 1*1=1
* 1*2=2 2*2=4
* 1*3=3 2*3=6 3*3=9
* 1*4=4 2*4=8 3*4=12 4*4=16
* ....9*9=81
*
* 2.打印出1-100之间所有的质数
*/
2018-12-29 13:14:57 +08:00
//创建外层循环,用来控制乘法表的高度
for (var i = 1; i <= 9; i++) {
//创建一个内层循环来控制图形的宽度
for (var j = 1; j <= i; j++) {
document.write("<span>" + j + "*" + i + "=" + i * j + "</span>");
}
2018-12-29 13:14:57 +08:00
//输出一个换行
document.write("<br />");
}
</script>
</head>
2018-12-29 13:14:57 +08:00
<body>
</body>
2018-12-29 13:14:57 +08:00
</html>
```
2018-12-29 13:14:57 +08:00
页面效果
2018-12-29 13:14:57 +08:00
![](http://img.smyhvae.com/20181229_1410.png)
2018-12-29 13:14:57 +08:00
## 我的公众号
2018-12-29 13:14:57 +08:00
想学习<font color=#0000ff>**代码之外的技能**</font>****id`qianguyihao`
2018-12-29 13:14:57 +08:00
扫一扫你将发现另一个全新的世界而这将是一场美丽的意外
2018-12-29 13:14:57 +08:00
![](http://img.smyhvae.com/2016040102.jpg)
2018-12-29 13:14:57 +08:00