变量的声明提前(变量提升)
使用var关键字声明的变量( 比如 `var a = 1`),**会在所有的代码执行之前被声明**(但是不会赋值),但是如果声明变量时不是用var关键字(比如直接写`a = 1`),则变量不会被声明提前。
**举例1**:
```javascript
console.log(a);
var a = 123;
```
打印结果:undefined。注意,网站打印结果并没有报错,而是 undefined,说明变量 a 被提前声明了,只是尚未被赋值。
**举例2**:
```javascript
console.log(a);
a = 123; //此时a相当于window.a
```
程序会报错:`Uncaught ReferenceError: a is not defined`。
**举例3**:
```javascript
a = 123; //此时a相当于window.a
console.log(a);
```
打印结果:123。
**举例4**:
扫描二维码关注公众号,回复:
11318840 查看本文章
```javascript
foo();
function foo() {
if (false) {
var i = 123;
}
console.log(i);
}
```
打印结果:undefined。注意,打印结果并没有报错,而是 undefined。这个例子,再次说明了:变量 i 在函数执行前,就被提前声明了,只是尚未被赋值。