# 流程控制

编程语言的流程控制分为三种：

* 顺序结构(从上向下顺序执行)
* 分支结构
* 循环结构

之前我们学习的方式就是顺序执行，即代码的执行从上到下，一行行分别执行。

```javascript
console.log("星期一");
console.log("星期二");
console.log("星期三");
```

### 分支结构

#### if 分支语句

```javascript
if(条件){
     // 条件为true时,执行的代码
   }
   
   if(条件){
     // 条件为true时,执行的代码
   }else{
     // 条件为false时,执行的代码
   }
   
   if(条件1){
     // 条件1为true时,执行的代码
   }else if(条件2){
     // 条件2为true时,执行的代码
   
   }....
   
   }else{
     // 上述条件都不成立的时候,执行的代码
   }
```

#### switch语句

```javascript
switch(条件){
      case 结果1:
           满足条件执行的结果是结果1时,执行这里的代码..
           break;
      case 结果2:
      	   满足条件执行的结果是结果2时,执行这里的代码..
      	   break;
      .....
      default:
           条件和上述所有结果都不相等时,则执行这里的代码
   }

switch('a'):
  case 1: //只会会执行case 1下面的xxx代码
  	xxx;
  	break;
  case 2:
  	xxx;
  	break;
  default:
  	xxx;
```

> 1、switch 比 if else更为简洁
>
> 2、执行效率更高。switch…case 会生成一个跳转表来指示实际的 case 分支的地址，而这个跳转表的索引号与 switch 变量的值是相等的。从而，switch…case 不用像 if…else 那样遍历条件分支直到命中条件，而只需访问对应索引号的表项从而到达定位分支的目的。
>
> 3、到底使用哪一个选择语句，代码环境有关，如果是范围取值，则使用 if else 语句更为快捷；如果是确定取值，则使用 switch 是更优方案。

### 循环语句

#### while循环

```javascript
while(循环的条件){
      // 循环条件为true的时候,会执行这里的代码
}
```

循环案例：

```javascript
var count = 0
while (count < 10){
    console.log(count);
    count++;
}
```

#### for循环

```javascript
// 循环三要素
for (1.声明循环的开始; 2.条件; 4.循环的计数) {
    // 3. 循环条件为true的时候,会执行这里的代码
}

for (循环的成员下标 in 被循环的数据) {
    // 当被循环的数据一直没有执行到最后下标,都会不断执行这里的代码
}   
```

循环案例：

```javascript
// 方式1
for (var i = 0; i < 10; i++) {
    console.log(i)
}

// 方式2
var arr = [111, 222, 333]
for (var i in arr) {
    console.log(i, arr[i])
}
```

#### 退出循环（break和continue）

```javascript
for (var i = 0; i < 100; i++) {
    if (i === 88) {
        continue  // 退出当次循环
        // break  // 退出当前整个循环
    }
    console.log(i)
}
```
