一、JS的编译和执行
① js是一门解释性语言
·预先编译,再执行
· 先通读全文,在解释含义
②编译时
- 提升
③ 执行时
- 按照逻辑,结构正常执行
二、变量和函数会提升
① var的提升
- 提前声明,=号的位置赋值
```js
console.log(a); // undefined
var a = 10;
console.log(a); // 10
```
- ↑↑↑↑等价于↓↓↓↓
```js
var a;
console.log(a); // undefined
a = 10;
console.log(a); // 10
```
②function的函数提升
- 整体提升
- 即提前声明,有提前赋值
③如果var遇到function
1. 赋值式创建函数
```js
var fn = fucntion(){}
```
- 提升的是var,不是function
2. 变量和函数重名
```js
var a = "hello";
function a(){}
```
- var提升的更高,所以function占便宜,生效的是function