前端面试题:let、const、var的区别

92 阅读2分钟

在 JavaScript 中,letconstvar 是用于声明变量的关键字,它们有一些区别:

  1. var :

    • var 是在 ES5 中引入的声明变量的关键字。
    • 其作用域是函数作用域或全局作用域,不存在块级作用域。
    • 使用 var 声明的变量可以在其声明的函数内部任何位置被访问,这种行为通常被称为变量提升(Hoisting)。
    • 使用 var 声明的变量可以被多次声明而不报错,可能导致意外的覆盖变量的情况。
    • 具有变量提升的特性,会在代码执行前将变量声明提升到作用域的顶部。
  2. let

    • let 是在 ES6(ES2015)中引入的声明变量的关键字。
    • 其作用域是块级作用域(指 if 语句、for 循环、{} 等花括号内部)。
    • 不会像 var 那样存在变量提升,变量在声明前无法被访问。
    • 同一作用域内不允许重复声明同名变量。
    • 具有暂时性死区(Temporal Dead Zone)的特性,即在变量声明之前访问该变量会抛出一个 ReferenceError。
  3. const

    • const 也是在 ES6 中引入的,用于声明常量的关键字。
    • 声明的变量必须进行初始化赋值,且一旦赋值就不能再被修改,但这不意味着赋值对象的内容不可变。
    • 具有块级作用域,不允许重复声明同名常量。
    • 和 let 一样不具备变量提升,存在暂时性死区。

示例:

javascript
// 使用 var
var a = 1;
{
  var a = 2;
  console.log(a); // 输出 2
}
console.log(a); // 输出 2

// 使用 let
let b = 1;
{
  let b = 2;
  console.log(b); // 输出 2
}
console.log(b); // 输出 1

// 使用 const
const c = 1;
// c = 2; // 报错,常量无法重新赋值

总结:

  • 推荐优先使用 const,其次是 let,避免使用 var,因为它们提供更好的作用域管理和变量声明的安全性。使用 const 声明的变量表示其值不会被重新赋值,这有助于提高代码的可读性和维护性。