JS流程控制

来自CloudWiki
Cloud17讨论 | 贡献2019年7月12日 (五) 03:47的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索

流程控制

条件分支语句

if if-else switch三元运算符

循环语句

while for do-while

流程控制语句

break continue label

作用:改变程序执行流程

   break:语句“跳出”循环
   continue:语句“跳过”循环中的一个迭代

break

break语句会中断循环,并继续执行循环之后的代码(如果有)

实例:

var sum=0;
var a=1;
while(a<=5){
    sum=sum+a;
    ++a;
    if(a===3) break;
    console.log('sum->',sum,'a->',a);
}
console.log('循环结束后 sum->',sum,'a->',a);

执行结果:

sum-> 1 a-> 2 debugger eval code:7:13
循环结束后 sum-> 3 a-> 3

执行分析:

本段代码本来是执行了sum=1+2+3+4+5这样一个循环流程,但我们加上了a=3时则跳出循环这样一个操作,则有:

第一次循环: sum=0+1=1,a=2

第二次循环: sum=1+2=3,a=3,满足中断条件,跳出循环

continue

continue 语句中断(循环中)的一个迭代,如果发生指定的条件。然后继续循环中的下一个迭代。

实例:

var sum=0;
var a=1;
while(a<=5){
    sum=sum+a;
    ++a;
    if(a===3) continue;
    console.log('sum->',sum,'a->',a);
}
console.log('循环结束后 sum->',sum,'a->',a);

执行结果:

 sum-> 1 a-> 2 debugger eval code:7:13
sum-> 6 a-> 4 debugger eval code:7:13
sum-> 10 a-> 5 debugger eval code:7:13
sum-> 15 a-> 6 debugger eval code:7:13
循环结束后 sum-> 15 a-> 6

执行分析:

第一次循环:sum=0+1=1,a=2

第二次循环: sum=1+2=3,a=3 ,满足条件,返回循环头部执行循环

第三次循环:sum=3+3=6,a=4

第四次循环:sum=6+4=10,a=5

……

for循环

实例1:break

var sum = 0;
for(var i=0;i<5;i++)
{
  sum = sum + i;
  if (i === 3) break;
  console.log('sum->', sum, 'i->', i);
}

执行结果:

sum-> 0 i-> 0 debugger eval code:6:11
sum-> 1 i-> 1 debugger eval code:6:11
sum-> 3 i-> 2

实例二:continue

var sum = 0;
for(var i=0;i<5;i++)
{
  sum = sum + i;
  if (i === 3) continue;
  console.log('sum->', sum, 'i->', i);
}

执行结果:

sum-> 0 i-> 0 debugger eval code:6:11
sum-> 1 i-> 1 debugger eval code:6:11
sum-> 3 i-> 2 debugger eval code:6:11
sum-> 10 i-> 4

可以看到以上两个案例,for循环里,break和continue的作用与前面的是一样的。

实例三:for循环嵌套

for (var i=0;i<3;i++) {
  for (var j=0;j<3;j++){
    console.log('i->',i,'j->',j);
  }
}
console.log('循环外i->',i,'j->',j)

执行结果:

i-> 0 j-> 0 debugger eval code:3:13
i-> 0 j-> 1 debugger eval code:3:13
i-> 0 j-> 2 debugger eval code:3:13
i-> 1 j-> 0 debugger eval code:3:13
i-> 1 j-> 1 debugger eval code:3:13
i-> 1 j-> 2 debugger eval code:3:13
i-> 2 j-> 0 debugger eval code:3:13
i-> 2 j-> 1 debugger eval code:3:13
i-> 2 j-> 2 debugger eval code:3:13
循环外i-> 3 j-> 3

执行分析:

执行一次外层循环后,再执行完所有内层循环,然后执行下一次的外层循环

实例四:循环嵌套与循环控制语句

for (var i=0;i<3;i++) {
  for (var j=0;j<3;j++){
    if(i===1&&j===1) break;
    console.log('i->',i,'j->',j);
  }
  if (i===1&&j===1) break;
}
console.log('循环外i->',i,'j->',j)

执行结果:

i-> 0 j-> 0 debugger eval code:4:13
i-> 0 j-> 1 debugger eval code:4:13
i-> 0 j-> 2 debugger eval code:4:13
i-> 1 j-> 0 debugger eval code:4:13
循环外i-> 1 j-> 1

请同学们参照上述结果,并根据老师课堂讲解,分析程序执行流程。

flag标签

flag是程序员自己定义的变量,作为一个标记(志),标记当前的进程,或者标记某种状态,用来控制程序的流向。

因为程序要实现的功能很多,为了区分各个程序段实现了什么功能就用标志位的值,然后使用if语句判断标志位的值,进入相应的程序实现相应的功能。

实例:

flag:{
  console.log('hello');
  break flag;
  console.log('你好');
}

执行结果:

Wx3-9.png