JavaScript中var、let和const的区别
在JavaScript中,var、let和const是定义变量的三种方式,它们之间有着一些重要的区别。
var
在ES5及之前的版本中,var是定义变量最常用的方式。它的作用域是函数级的,也就是说,如果一个变量是用var声明的,它只能在函数内部访问。
function example() {
var x = 10;
if (true) {
var y = 20;
console.log(x); // 10
console.log(y); // 20
}
console.log(y); // 20
}
example();
在上面的例子中,变量x和y都是用var声明的,它们在函数内部都可以被访问到。
let
ES6引入了let关键字,用于定义块级作用域的变量。使用let声明的变量只在当前代码块内有效,不会被提升。
function example() {
let x = 10;
if (true) {
let y = 20;
console.log(x); // 10
console.log(y); // 20
}
console.log(y); // Uncaught ReferenceError: y is not defined
}
example();
在上述示例中,变量x和y都是用let声明的,y在if语句块内定义,因此在外部无法访问到。
const
const也是ES6引入的关键字,用于声明常量。一旦用const声明变量,就不能再修改其值。const声明的变量必须初始化赋值。
const PI = 3.1415;
PI = 3.14; // Uncaught TypeError: Assignment to constant variable.
const arr = [1, 2, 3];
arr.push(4); // 可以向数组中添加元素
console.log(arr); // [1, 2, 3, 4]
在上面的例子中,PI被声明为一个常量,再次赋值会导致错误。而对于数组来说,const只是保证变量指向的地址不会改变,而数组本身是可修改的。
总结
- var的作用域是函数级的,let和const的作用域是块级的。
- var存在变量提升,let和const不存在。
- 使用const声明的变量不能再次赋值,但对于引用类型的变量,其内部属性是可以修改的。