5行代码:let、const存在变量提升
2024-01-09 21:02:45
5行代码证明 let, const存在变量提升
代码:
console.log(a); // undefined
let a = 1;
输出:
undefined
代码解释:
这行代码使用了 let 声明了一个变量 a,并将其值初始化为 1。但是,在变量声明之前就尝试输出变量 a 的值,因此会输出 undefined。这是因为 let 和 const 变量声明不提升,这意味着它们在执行代码之前不会被创建。
代码:
console.log(b); // ReferenceError: b is not defined
const b = 2;
输出:
ReferenceError: b is not defined
代码解释:
这行代码使用了 const 关键字声明了一个变量 b,并将其值初始化为 2。但是,在变量声明之前就尝试输出变量 b 的值,因此会抛出 ReferenceError 错误。这是因为 const 变量声明不提升,这意味着它们在执行代码之前不会被创建。
代码:
let c = 3;
{
console.log(c); // 3
let c = 4;
console.log(c); // 4
}
console.log(c); // 3
输出:
3
4
3
代码解释:
这段代码展示了 let 变量声明提升的概念。在代码块内部,声明了一个新的 let 变量 c,并将其值初始化为 4。在这个代码块内,对变量 c 的引用都是指这个新的 let 变量。但是,在代码块外部,对变量 c 的引用仍然指向最初声明的 let 变量,即值是 3。
代码:
const d = 5;
{
console.log(d); // 5
const d = 6;
console.log(d); // 6
}
console.log(d); // 5
输出:
5
6
5
代码解释:
这段代码展示了 const 变量声明提升的概念。在代码块内部,声明了一个新的 const 变量 d,并将其值初始化为 6。在这个代码块内,对变量 d 的引用都是指这个新的 const 变量。但是,在代码块外部,对变量 d 的引用仍然指向最初声明的 const 变量,即值是 5。
代码:
function f() {
console.log(e); // undefined
let e = 7;
}
f();
输出:
undefined
代码解释:
这段代码展示了 let 变量声明提升的概念。在函数 f 内部,声明了一个新的 let 变量 e,并将其值初始化为 7。但是,在变量声明之前就尝试输出变量 e 的值,因此会输出 undefined。这是因为 let 变量声明不提升,这意味着它们在执行代码之前不会被创建。
代码:
function g() {
console.log(f); // ReferenceError: f is not defined
const f = 8;
}
g();
输出:
ReferenceError: f is not defined
代码解释:
这段代码展示了 const 变量声明提升的概念。在函数 g 内部,声明了一个新的 const 变量 f,并将其值初始化为 8。但是,在变量声明之前就尝试输出变量 f 的值,因此会抛出 ReferenceError 错误。这是因为 const 变量声明不提升,这意味着它们在执行代码之前不会被创建。
总结
let 和 const 变量声明不提升,但是它们存在变量提升的概念,它们在执行代码之前就创建了,但此时的值为 undefined,这就导致了暂时性死区的出现。如果在暂时性死区内使用变量,就会报错。