JS变量提升

1.  js会先把所有变量都声明好了之后,然后才进行赋值,并不是声明一个变量就赋值,再声明一个再赋值。js所谓变量提升,提升就是为了事先声明变量。中间包括函数声明

2. 在作用域中,不管变量和函数写在什么位置,所有变量会被整体提升到作用域顶部,所有函数也会被整体提升到作用域顶部,但是函数整体在变量整体的后面。

3.

变量运行(搜索)机制:

首先看,有没有局部作用域

如果有,查找是不是这个局部作用域定义的变量

如果不是,寻找上一级作用域,直到找到全局作用域

如果全局作用域也找不到这个变量,这个变量就是未定义的 undefined

 

实例如下:

 

 

JS变量提升JS变量提升JS变量提升

2.

JS变量提升JS变量提升JS变量提升

在变量提升过程中,函数声明也需要提升到变量后面,参考第二条,结果为 undefined ,0 ,1

3.

JS变量提升JS变量提升JS变量提升

4.

JS变量提升JS变量提升