### 变量提升
> 在`当前作用于`中,js代码自上而下执行之前,浏览器首先会把所有带`var/function`关键字的进行提前的`声明或者定义`
> 声明(declare):var num;在当前作用于中,我有num这个名了
> 定义(defined):num=12;把声明的名字赋一个值
> **带var关键字的只是提前的声明一下;带function关键字的在变量提升阶段把声明和定义都完成了;**
```javascript
console.log(num);//=>undefined
console.log(fn);//fn函数体
var num = 13;
function fn(){
console.log(a);//=>undefined
var a = 10;
console.log(a);//=>10
}
fn();
console.log(num);//13
```
>