var 、let 、const 的区别

时间:2024-10-15 21:31:19

在 JavaScript 中,varlet 和 const 都是用于声明变量的关键字,但它们有以下几个主要区别:

  1. 作用域

    • var 声明的变量具有函数作用域或全局作用域。
    • let 和 const 声明的变量具有块级作用域(即在大括号 {} 内有效)。
  2. 重复声明

    • var 可以重复声明同名变量,后续的声明会覆盖之前的声明。
    • let 和 const 不允许在同一块级作用域内重复声明同名变量。
  3. 变量的值是否可以改变

    • var 和 let 声明的变量的值可以改变。
    • const 声明的变量的值不能被改变(即常量)。

以下是一些代码示例来说明这些区别:

作用域示例

// var 的函数作用域示例
function foo() {
  var x = 10;
}
console.log(x); // ReferenceError: x is not defined

// let 和 const 的块级作用域示例
if (true) {
  let y = 20;
  const z = 30;
}
console.log(y); // ReferenceError: y is not defined
console.log(z); // ReferenceError: z is not defined

重复声明示例

// var 的重复声明示例
var a = 1;
var a = 2; // 允许重复声明,a 的值被覆盖为 2

// let 和 const 的重复声明示例
let b = 3;
let b = 4; // SyntaxError: Identifier 'b' has already been declared
const c = 5;
const c = 6; // SyntaxError: Identifier 'c' has already been declared

变量值是否可改变示例

// var 和 let 的变量值可以改变示例
var d = 7;
d = 8; // 允许改变变量值
let e = 9;
e = 10; // 允许改变变量值

// const 的变量值不能改变示例
const f = 11;
f = 12; // TypeError: Assignment to constant variable.

总结来说,var 是一个较旧的变量声明方式,let 和 const 是 ES6 引入的新特性,提供了更好的作用域控制和常量声明功能。通常情况下,建议使用 let 和 const 来声明变量。