先看一道题,输出对应的结果
var a = 2
function fn() {
b();
return;
var a = 1;
function b() {
console.log(a);
}
}
fn();
输出:
undefined
- 在编译阶段,JavaScript执行上下文时, 变量和函数的声明会在物理层面移动到代码的最前面
- 函数和变量相比,会被优先提升。这意味着函数会被提升到更靠前的位置。
- 只有声明被提升,不会提升初始化
- 会产生这种情况的场景:
- 先调用变量、函数,再去声明(不推荐的写法)
因此上述代码执行时,会被调整成如下顺序:
var a = 2
function fn() {
function b() {
console.log(a);
}
var a;
b();
return;
a = 1;
}
fn(); // undefined