关于变量提升首先来看一个例子:
在这个例子中,console.log(a) 输出的是undefined。
为什么会这样呢,如果按照正常的思路,会先在函数作用域中找,然后再去全局作用域中找到a
但实际并不是这样的,因为在这里发生了变量提升。也就是按照字面的意思来说就是变量提前声明了,也就是如下的:
a在函数中提前声明了。现在再来看一个例子:
看输出:
那么,这就说明window中已经有了b 只是还没有被赋值。
接下来看函数提升
按照正常情况,fun的执行是在fun定义之后,但在这里,在fun定义语句之前就可以使用了。这就是函数的变量提升。
再来看一个例子:
通过这样的方式定义了一个函数,却不能使用,这时因为f实际是定义的变量,所以不能算函数提升