变量声明
变量声明方法及特点
var
- 可以重复声明
- 变量声明提升
- 可修改
let
- 不可重复声明
- 无变量声明提升
- 可修改
const
- 不可重复声明
- 无变量声明提升
- 不可修改
测试代码
// var
// {
// var a = 1;
// var a = 2;
// var a = 3;
// console.log(a);
// }
// {
// console.log(a); // undefined
// var a = 1;
// console.log(a); // 1
// }
// let
// {
// let a = 1;
// let a = 2;
// console.log(a);
// }
// {
// console.log(a); // 报错
// let a = 1;
// console.log(a); // 1
// }
// {
// let a = 1;
// console.log(a); // 1
// a = 2;
// console.log(a); // 2
// }
// const
// {
// const a = 1;
// const a = 2; // 报错
// console.log(a);
// }
// {
// console.log(a); // 报错
// const a = 1;
// console.log(a);
// }
// {
// const a = 1;
// console.log(a);
// a = 2; // 报错
// console.log(a);
// }
什么是变量声明提升
在js脚本被解析时,会把var关键字提升到头部。
举个栗子
源代码
console.log(a);
var a = 1;
console.log(a);
解析后
var a;
console.log(a);
a = 1;
console.log(a);
const声明变量真的“不可变”吗
const关键字我们常用来声明常量,但是在js中,高级类型是可以越过这部分限制的(例如数组、对象等类型)。
因为在js中,高级类型是属于引用类型
例如const a = {},{}会指向一个内存地址,这段内存地址中的内容是可变的,但是地址是不变的,const只是限制内存地址,而不限制地址中储存的数据。
举个栗子
const persion = { name: 'xiaoming', age: 18 };
a.name = 'xiaoli'; // 可以修改
a.id = 19902834222; // 可以添加
persion = {}; // 报错 引用地址是不可以更改的