var const let的区别

125 阅读2分钟

在JavaScript中,var, const, 和 let 都是用来声明变量的关键字,但是它们之间有几个重要的区别:

  1. 作用域:

    • var: 在函数或全局范围内声明的变量具有函数或全局作用域。这意味着在该函数内的任何地方都可以访问到用 var 声明的变量,即便那个变量是在某个代码块(如 if 语句或循环)中声明的。如果是在全局作用域中声明,则在整个脚本中都可访问。
    • let 和 const: 这两个关键字声明的变量具有块级作用域,即只在声明该变量的代码块内有效。这意味着如果在一个 if 语句或 for 循环中使用 let 或 const 来声明变量,那么这个变量就只能在这个 if 语句或 for 循环内部被访问。
  2. 变量提升 (hoisting) :

    • var: 当你用 var 声明一个变量时,这个变量会被提升至当前作用域的顶部(全局或者函数)。然而,它的初始化值会是 undefined,直到你在代码中显式地给它赋值。
    • let 和 const: 同样会被提升至当前作用域的顶部,但是不能在声明之前进行访问(称为暂时性死区,temporal dead zone)。也就是说,在声明之前访问这些变量会导致错误。
  3. 重新赋值:

    • var 和 let: 可以在之后的代码中重新赋值。
    • const: 用来声明常量,声明后不可以重新赋值,并且在声明时必须立即初始化(即需要一个初始值)。

示例:

Javascript
深色版本
// var 的例子
console.log(a); // 输出: undefined
var a = 5;

// let 的例子
console.log(b); // 抛出引用错误:Cannot access 'b' before initialization
let b = 5;

// const 的例子
console.log(c); // 抛出引用错误:Cannot access 'c' before initialization
const c = 5; // 必须在声明时初始化

// 重新赋值
a = 10;
b = 10;
// c = 10; // TypeError: Assignment to constant variable.

总结来说,letconst 提供了更现代的变量声明方式,具有更清晰的作用域规则,并且避免了一些与 var 相关的陷阱。当你需要一个不会改变的值时,使用 const 是最佳选择。