什么是提升
所有的声明(变量或者函数声明)会被移动到各自作用域的最顶端,这个过程被称作"提升",提升的过程是发生在代码被执行之前的编译阶段, 无论作用域的声明出现在什么地方,都将在代码被执行之前首先处理。
var a = 2 问题
| |
可以看到,编译时变量a被提升,此处打印出2
另一个例子
| |
以上代码等价于:
| |
打印出a是undefined是显而易见的
函数优先提升
函数声明和变量声明同时提升时,函数会被优先提升,而且出现在后面的函数声明可以覆盖前面的函数声明。
考虑以下代码:
| |
函数声明foo被优先提升,因此函数调用foo()打印出2