返回

5行代码:let、const存在变量提升

前端

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,这就导致了暂时性死区的出现。如果在暂时性死区内使用变量,就会报错。