第三十关:诡异的电梯

任务目标:理解 Hoisting (提升) 现象

🐛

巴格

我明明把变量声明写在最后面,为什么前面就能用了?见鬼了!

x = 5; // 先使用 console.log(x); // 输出 5 (竟然没报错!) var x; // 后声明

JS 队长

这就是 变量提升 (Hoisting)

JS 引擎在运行代码前,会先把所有的 var 声明和 function 声明偷偷“坐电梯”搬到代码的最顶端。

🦸‍♂️

🛑 let 和 const 不坐电梯

letconst 比较守规矩。虽然它们在技术上也会被提升,但在你正式声明它们之前,它们处于“暂时性死区” (Temporal Dead Zone)

x = 5; // ❌ 报错:Cannot access 'x' before initialization let x;

⚠️ 只提升名字,不提升值

console.log(y); // 输出 undefined (不是 5!) var y = 5;

这相当于:

var y; // 名字被提升了 console.log(y); // 此时 y 是 undefined y = 5; // 赋值还在原地

🎮 预测未来

请预测下面代码的输出结果:

console.log(myVar); var myVar = 10;