let,const,var的区别

125 阅读3分钟

1.let,const,var之间的区别

let, const, 和 var 是 JavaScript 中用于声明变量的关键字,它们之间有一些区别:

  1. var:
    • var 是在 ES5 中引入的,它声明的变量是函数作用域或全局作用域的,而不是块级作用域。
    • 使用 var 声明的变量可以在声明之前被访问(变量提升),这可能会导致一些意外的行为。
    • var 声明的变量可以被重新声明和重新赋值。
  2. let:
    • let 是在 ES6(ES2015)中引入的,它声明的变量是块级作用域的,意味着它们只在声明它们的块(如 {})内可见。
    • let 声明的变量可以在声明之后被修改,但不能被重新声明。
    • let 声明的变量不会被提升到其作用域的顶部。
  3. const:
    • const 也是在 ES6 中引入的,它声明的是一个常量,意味着一旦被赋值,就不能再被修改。
    • const 声明的变量必须在声明时进行初始化,否则会引发错误。
    • const 声明的变量也是块级作用域的,且不会被提升到其作用域的顶部。 总的来说,推荐优先使用 const,除非你知道变量的值需要被修改,这时可以使用 let。避免使用 var,因为它有一些不直观的行为,并且可能导致意外的错误。

2.const创建的变量在赋值之后不能被修改

const 关键字用于声明常量,它创建的变量在赋值后不能再被修改。但是需要注意的是,const 声明的常量并不意味着它所指向的值是不可变的,而是指向的内存地址不可变。这意味着如果你声明一个基本类型(如数字、字符串等)的常量,你不能改变这个值,但如果声明的是一个对象或数组,你可以改变其属性或元素。 下面是对 const 的详细说明:

  1. 常量的值不可变: 一旦用 const 声明一个变量并赋值,就不能再修改该变量的值。
  2. 指向的地址不可变: 对于基本数据类型(如数字、字符串、布尔值等),const 声明的常量指向的是一个固定的内存地址,不能改变其指向;但对于对象和数组等复合数据类型,const 声明的常量指向的是对象或数组在内存中的地址,该地址不可变,但对象或数组本身是可以修改的。
  3. 必须初始化: 使用 const 声明的常量必须在声明时进行初始化赋值,否则会报错。
  4. 块级作用域: const 声明的常量也是块级作用域的,只在声明它们的块内部可见。 下面是一些示例说明 const 的使用:
// 声明常量并初始化为基本类型
const PI = 3.14;
// 试图修改常量的值会导致错误
// PI = 3.14159; // TypeError: Assignment to constant variable.
// 声明常量并初始化为对象
const person = { name: 'John', age: 30 };
// 可以修改对象的属性
person.age = 31;
console.log(person); // 输出: { name: 'John', age: 31 }
// 试图重新赋值常量的地址会导致错误
// person = { name: 'Jane', age: 25 }; // TypeError: Assignment to constant variable.
// 声明常量但不进行初始化会导致错误
// const foo; // SyntaxError: Missing initializer in const declaration
// 常量在块级作用域内有效
if (true) {
  const foo = 'bar';
  console.log(foo); // 输出: 'bar'
}
// console.log(foo); // ReferenceError: foo is not defined

总之,const 声明的常量一般用于那些在程序执行过程中不应该被修改的值,但需要注意对象和数组等复合数据类型的特殊性。