概述:
循环控制语句是根据对应的条件来控制对应的代码片段执行的次数 (多次执行 循环执行)
常用的控制语句 while do while
循环是重复执行多次代码所以对应的执行次数是可以计算的
执行次数和对应的条件判断中的相关条件的一个关系就是时间复杂度(时间复杂度是用于区分效率的
他是用来优化程序的)。然后对应的循环在书写过程中我们需要尽可能的避免死循环(无限循环)。
循环的三要素
初始值 初始的变量值
判断条件 对应执行循环中的代码条件
迭代量 基于初始值的变化
常用的循环语句
while 循环
do while循环
for 循环
while 循环
var 变量 = 初始值
while(判断条件){
执行的代码(循环体)
迭代量
}
示例
//执行打印操作10 遍
var i = 0 //初始值
//当出现死循环的时候无法执行其他操作 JavaScript是一个单线程解析的语言
while(i<10){
i++
console.log('你好'); //结果打印10遍你好
}
do while
var 变量名 = 初始值
do{
迭代量
循环体
}while(判断条件)
特点:先做后判断 最少执行一次
do while 和while的使用场景
do while是先执行后判断,最少执行一次(常用与人机交互)
while是先判断后执行 最少执行0次(对应的循环处理)
for
for循环跟while直接可以互相转换也就说他们对应的运行过程是一样的
for(初始值;判断条件;迭代量){
循环体
}
for(;;)此为死循环
循环嵌套
for(初始值;条件;迭代量){
for(初始值;条件;迭代量){
执行的代码 (执行的次数是对应的俩个循环执行次数的乘积)
}
}
var 变量 = 初始值
while(条件表达式){
执行的代码(循环体)
迭代
var 变量 = 初始值
while(条件表达式){
执行的代码(循环体)
迭代
}
}
for(初始值;条件;迭代量){
var 变量 = 初始值
while(条件表达式){
执行的代码(循环体)
迭代
}
}
break和continue
break是用于跳出当前循环(或者是Switch块),执行后面的代码.(跳出意味着本次循环结束了)
continue 是用于跳出某个循环 其他循环继续
break示例
for(var i = 0;i<5;i++){
if(i%2==0){
break; // 当i为2时取余为0,则结束当前的循环
}
console.log(i) //1
}
continue示例
for(var i = 0 ;i<5;i++){
if(i%2==0){
continue; //跳过2和4取余为0 的情况,
}
consloe.log(i) //结果 1 3
}
练习
*
***
*****
*******
//每行的* 1 3 5 7
//每行的空格 3 2 1 0
for(var i=0;i<4;i++){
var line = '' //接受每行的内容
//打印空格的循环
for(var k = 0;k<3-i;k++){
line+=" "
}
for (var j = 0; j < 2 * i + 1; j++) {
line += '*'
}
document.write(line+'<br/>')
}
50-100之间 跳过所有的里面带7的和7的倍数 将其他的全部打印
for(var i=50;i<100;i++){
if(parseInt(i/10) == 7 || i%10 == 7 || i%7==0){
continue;
}
console.log(i)
}
扩展内容(时间复杂度)
时间复杂度概述
在恒定的环境内,他的执行次数和对应的变量的比列构成的值为时间复杂度。时间复杂度是在一定程度
上表示当前的程序的运行速度,时间复杂度越低那么运行速度就越快。还有一个就是我们需要考虑的空
间复杂度,空间复杂度是指你的程序在运行的时候开辟的内存大小,空间复杂度越低占用的内存就越少
(内存不再优先考虑)
时间复杂度的分类及示例
时间复杂度使用字母O来表示 他的对应分类和其执行次数的比列是相关的
O(1) 常数阶
O(logn) 对数阶
O(n) 线性阶
console.log('hello world') //一切没有变量来控制的 只执行一次的代码他属于常数阶 O(1)
//2 * 2 * 2 100-10求二的对数 log2(n-m) O(logn)
var m = 10
var n = 100
var k = 2
while(m>n){
m *= k ;
console.log('hello')
}
O(nlogn) 线性对数阶
O(n平方) 平方阶
O(n的立方) 立方阶
O(n的k次方) k次方阶
总结
从上可得 循环嵌套不会超过俩次!从对应得时间复杂度来看 我们可以得到logn和n是比较性常用得
我们发现logn是比n要快得,所以在后续得优化中我们采用logn级别得时间复杂度来替代n。
对于for循环和while循环 对应得时间复杂度来说while要快于for循环,用while来替代for循环,可以提升执行速度
这个的执行次数由对应变量n控制 所以他属于线性阶 O(n)