JavaScript变量提升
JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。
1 | a = 2; |
以上代码段会被引擎理解为如下形式:
1 | function foo() { |
函数声明和变量声明都会被提升。但是一个值得注意的细节是函数会首先被提升,然后才是变量
1 | foo(); // 3 |
var foo 尽管出现在 function foo()… 的声明之前,但它是重复的 var 声明被忽
略了,但是出现在后面的函数声明还是可以覆盖前面的,所以输出 3
注意:es6 中 let 和 class 不存在变量提升的现象
1 | a = 1; // ReferenceError: a is not defined |
1 | const a = new A(); // ReferenceError: A is not defined |