- 首先我们需要明白一点:
提升是指声明提升,而赋值和其他运行逻辑会留在原地 例子:
foo();
function foo() {
console.log( a ); // undefined
var a = 2;
}
var a = 2可以理解为两个步骤:
- 声明变量
a- 对
a赋值 根据输出的是undefined, 说明了var a声明被提升了, 而a=2这个赋值操作却没有
- 函数声明会被提升,但是函数表达式却不会被提升。
foo(); // 不是 ReferenceError, 而是 TypeError!
var foo = function bar() { // ... }; // 此处是一个函数表达式
- 函数声明和变量声明都会被提升, 但是
函数声明优先级高于变量声明