1.let,const,var之间的区别
let, const, 和 var 是 JavaScript 中用于声明变量的关键字,它们之间有一些区别:
var:var是在 ES5 中引入的,它声明的变量是函数作用域或全局作用域的,而不是块级作用域。- 使用
var声明的变量可以在声明之前被访问(变量提升),这可能会导致一些意外的行为。 var声明的变量可以被重新声明和重新赋值。
let:let是在 ES6(ES2015)中引入的,它声明的变量是块级作用域的,意味着它们只在声明它们的块(如{})内可见。let声明的变量可以在声明之后被修改,但不能被重新声明。let声明的变量不会被提升到其作用域的顶部。
const:const也是在 ES6 中引入的,它声明的是一个常量,意味着一旦被赋值,就不能再被修改。const声明的变量必须在声明时进行初始化,否则会引发错误。const声明的变量也是块级作用域的,且不会被提升到其作用域的顶部。 总的来说,推荐优先使用const,除非你知道变量的值需要被修改,这时可以使用let。避免使用var,因为它有一些不直观的行为,并且可能导致意外的错误。
2.const创建的变量在赋值之后不能被修改
const 关键字用于声明常量,它创建的变量在赋值后不能再被修改。但是需要注意的是,const 声明的常量并不意味着它所指向的值是不可变的,而是指向的内存地址不可变。这意味着如果你声明一个基本类型(如数字、字符串等)的常量,你不能改变这个值,但如果声明的是一个对象或数组,你可以改变其属性或元素。
下面是对 const 的详细说明:
- 常量的值不可变: 一旦用
const声明一个变量并赋值,就不能再修改该变量的值。 - 指向的地址不可变: 对于基本数据类型(如数字、字符串、布尔值等),
const声明的常量指向的是一个固定的内存地址,不能改变其指向;但对于对象和数组等复合数据类型,const声明的常量指向的是对象或数组在内存中的地址,该地址不可变,但对象或数组本身是可以修改的。 - 必须初始化: 使用
const声明的常量必须在声明时进行初始化赋值,否则会报错。 - 块级作用域:
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 声明的常量一般用于那些在程序执行过程中不应该被修改的值,但需要注意对象和数组等复合数据类型的特殊性。