var
var是ES5之前的标准方式来声明变量。
// var声明
var a = 10;
if (true) {
var a = 20; // 同一个变量a,值变为20
console.log(a); // 输出20
}
console.log(a); // 输出20
let
let
是ES6(ECMAScript 2015)引入的,用于声明块级作用域的变量。
// let声明
let b = 10;
if (true) {
let b = 20; // 不同的变量b,外部的b仍然为10
console.log(b); // 输出20
}
console.log(b); // 输出10
const
const
也是ES6引入的,用于声明一个只读的常量。
// const声明
const c = 10;
// c = 20; // 错误:不能重新赋值
// 尝试修改const声明的对象属性
const obj = { value: 10 };
obj.value = 20; // 正确:可以修改对象属性
以下是var
、let
和const
的一些区别:
var | let | const | |
---|---|---|---|
作用域: | 函数作用域或全局作用域 | 块级作用域 | 块级作用域。 |
提升: | 变量提升,可以在声明之前访问,但会得到undefined | 不存在变量提升,必须先声明后使用,否则会报错 | 不存在变量提升,必须先声明后使用,否则会报错 |
重声明: | 可以在同一作用域内重复声明 | 不能在同一作用域内重复声明 | 不能在同一作用域内重复声明 |
值的更改: | 可以重新赋值 | 可以重新赋值 | 一旦赋值,不能重新赋值,但可以修改其内部属性(如果是对象的话) |
若有问题欢迎讨论指正。