JavaScript循环语句篇

1. for 循环:

for 循环的形式为:

for(var i = 0; i < 10; i++){
	document.write('a');  //循环体
}						  //输出结果为10个a

其中,for 为关键字,小括号里放了三个语句,用两个分号隔开,大括号里的语句叫做循环体,这样这个 a 就被循环往复打印了十遍,它的原理在于它的执行顺序:
第一步:先执行小括号里边的第一个语句 var i=0;(这个语句只执行一遍,所有的 for 循环小括号里的三条语句中的第一条只执行一遍,以后就不用了)
第二步:把小括号里的第二条语句塞到 if 里作为条件来判断,如果条件成立则执行大括号里的循环体,在此例中,if(i<10){ document.write(“a”);},因为 0<10 是成立的,所以 a 被打印了一遍。
第三步:执行小括号里的第三条语句,i++,此时 i 变成了 1.
第四步:再把小括号里的第二条语句塞到 if 里作为条件来判断,如果条件成立则执行大括号里的循环体,在此例中,因为 1<10 是成立的,所以 a 又被打印了一遍。
第五步:继续执行小括号里的第三条语句,i++,此时 i 变成了 2.
以此类推…………
到最后,当 i 变成了 9,判断 9<10,打印第十个 a 之后,继续 i++,i 变成了 10,10<10 不成立,则立即结束循环。
总结:先执行 for 循环小括号里的第一条语句,然后把第二条语句塞到 if 里作为条件判断,如果条件成立,则执行大括号里的循环体,然后执行第三条语句,执行完之后再把第二条语句塞到 if 里作为条件判断,如果条件成立,则执行大括号里的循环体, 继续执行小括号里的第三条语句……直到括号里的第二条语句塞到 if 里作为条件判断时条件不成立,则 for 循环结束。
(注意:for 循环括号里的第一条语句只用一次,第二条语句判断条件成立执行完循环体之后第三条语句才执行,第三条语句永远在最后执行。)

注:其实 for 循环的小括号里也没有非要写三个语句,如果哪个语句是空的,就不 会执行,直接跳过,所以也可以这么写:

var i = 0;
for(; i < 10; ){
	document.write('a');  //循环体
	i++;
}						  //输出结果为10个a

把 var i=0 提出去,让他先执行,然后,小括号里的第一个语句是空的,直接跳过,然后判断第二句,执行循环体(先打印,再 i++),然后小括号第三句空的,跳过,继续判断第二句,执行循环体,循环往复,直到 i 加到 10,10<10 是假的,循环停止,i 从 0 到 9,a 被打印了十次。

接着上例打印 10 个 a,但是要求 for 循环小括号里只有一个 i,i=1,代码为:

var i = 1;
var count = 0;
for(; i; ){
	document.write('a');  //循环体
	count++;
	if(count == 10){
		i = 0;
	}
}						  //输出结果为10个a

解析:这里边定义一个计数器 count,然后把 count 放到 for 循环里让他自己++,再写 一个 if 语句,当 count 加到 10 之后,让 i=0;加了 10 次后,i 变成 0,小括号里的条件就不成立了,for 循环结束,a 被打印了 10 遍。也可以不用 count,用 i 作为计数器, 当 i 等于 11 的时候,让 i 归零:

var i = 1;
for(; i; ){
	document.write('a');  //循环体
	i++;
	if(i == 11){
		i = 0;
	}
}						  //输出结果为10个a

注:这里为什么要让 i = 0才能终止循环,我们知道循环之所以能进行是因为小括号里的条件判断为真才会执行循环体,而i = 0,0 在逻辑判断上转换为 false 详见之前发布的运算篇中的逻辑运算符,故当 i = 0 时结束循环。

其实 for 循环还能衍生很多东西出来,因为它每次执行的是循环体,所以我们可以抓住一些变化:

for(var i = 0; i < 10; i++){
	document.write(i);  //循环体
}						//输出结果为0,1,2,3,4,5,6,7,8,9

解析:i 可以控制循环圈数,它也可以代表一个数字在变化,所以直接让 i<10 并且自加,在打印 i 即可。

同时也可利用 for 循环求和:

var count = 0;
for(var i = 0;i<10;i++){
	count += i;
}
document.wriet(count);

解析:此处的 count 相当于一个容器,它存放了每一圈循环后 i 产生变化后的值的累加,注意的是必须等到循环结束后再打印 count.

2. while循环:

它的形式为:

var i = 0;
while(i<10){
	document.wriet("a");
}   //结果为10个a

其实 for 循环里小括号前后不写东西的话只有中间写东西就是 while 循环,for(;i<10;) {循环体}就等于 while(i<10){循环体},和 for 循环相似,不再赘述。

3. do while 循环:一般不用

它的形式为:

do{
	//执行语句
}while(条件)

不管 while 里的条件能不能满足都会先执行一遍语句,它是先执行语句再判断条件,感觉特别别扭,一般我们不用它,也基本没人用。

4. 练习:

  • 计算 2 的 n 次幂,n 可输入,n 为自然数。
var n = parseInt(window.prompt("请输入 n"));
var mul = 1;
for(var i = 0; i<n; i++){
	mul *= 2;
}
document.write("2的" + n + "次幂=" + mul)

解析:2 的 n 次幂就是 n 个 2 相乘,用 mul 作为他的结果,先让 mul=1,n 个 2 相乘即 mul 被乘了 n 次 2,用编程语言就可以理解为它是一个循环,然后每次循环都给 mul 自身乘 2,乘了 n 次 2,则循环了 n 圈,然后用 n 去控制循环圈数即可。

  • 计算 n 的阶乘,n 可输入。
var n = parseInt(window.prompt('请输入 n'))var mul = 1;
for(var i = 0; i<n; i++){
	mul *= i;
}
documeng.write(n + '的阶乘=' + mul);

解析:阶乘就是,比如说 5 的阶乘就是 54321,所以也可以理解成 for 循环,为了 让 n 和循环圈数相等,所以 var mul=1,然后去乘这 5 个数,乘 5 圈,用 i 表示这五个数,先让 i 等于 1,然后去乘,再自加……加到 5 去乘,循环结束。

  • 输入 a,b,c 三个数,打印出最大的数。
var a = parseInt(window.prompt("输入 a"));
var b = parseInt(window.prompt("输入 b"));
var c = parseInt(window.prompt("输入 c"));
if(a>b){
	if(a>c){
		document.write('a');
	}else{
		document.write('c');
	}
}else{
	if(b>c){
		document.write('b');
	}else{
		document.write('c');
	}
}

解析:先让 a 和 b 比,如果 a 大于 b,就让 a 和 c 比,a 大于 c 的话就打印 a,否则打印 c,如果 a 不大于 b,就让 b 和 c 比,b 大于 c 的话就打印 b,否则打印 c。

  • 编写一个程序,输入一个三位数的正整数,输出时反向输出,例如输入456,输出654.
var num = parseInt(window.prompt("请输入一个三位数"));
if(num < 100 || num > 999){
	document.write("输入不正确!");
}else{
	var a = num % 10;     
	num = num - a;     
	var b = num % 100;     
	num = num - b;     
	b /= 10;     
	var c = num / 100;     
	var num1 = a * 100 + b * 10 + c;     
	document.write(num1);
}

解析:此例中用 cba 来比喻三位数,输出 abc,先用这个数摩尔 10,把 a 取出来,然后用 cba 减去 a 得 cb0,再用 cb0 摩尔 100 得到 b0,用 cb0 减去 b0 得 c00,用 b0 除以 10 取出 b,用 c00 除以 100 取出 c,三个数字取出来之后,组成 abc,a 乘 100 加 b 乘 10 加 c 即可。

注:其实还有更简单的做法,位数也不用做限制,这里为了体现在特定条件下(限制位数)用 if 来做更方便。

function reverse(){
    var num = window.prompt("请输抄入任意数值:"),
        arr = num.split(""),
        newArr = arr.reverse();
        document.write(newArr.join(""));
}
reverse();

解析:这里涉及到三个知识点(函数 数组 以及方法),后续会详细讲到,这里先不做赘述,这段代码首先写了一个函数 reverse,函数体内声明了三个变量(字符串:num 数组:arr),首先用 split("") 方法将字符串 num 切割成一个数组并存放到数组 arr 中,再用 reverse() 方法将数组 arr 中的元素颠倒并存放到数组 newArr 中,然后再用 join("") 方法将数组 newArr 转化为字符串并且输出。最后就是调用 reverse() 这个函数即可实现输入任意正整数则输出他颠倒过来的顺序。

声明:作者通过观看渡一教育免费公开课及相关文档总结的笔记,不做任何商业用途,仅供学习交流,感谢指正,如有侵权烦请立马联系,欢迎转载,请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山大王杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值