let和const命令
let
let命令与var类似,但是所声明的的变量只能在let所在的代码块内有效,let不存在变量提升
- let的块作用域
{
let a = 1;
var b = 2;
}
a //报错, 离开了块级作用域let所声明的变量不可访问
b //2
- let不存在变量提升
console.log(a) //报错
console.log(b) //undefined var声明的变量存在变量提升
let a = 1;
var b = 2;
- let的暂时性死区
var a = 1
if(true){
a = 'abc' //报错,在 {}块级作用域下变量a被let声明,变量a不再受外部影响
let a;
}
- let用于for循环
for(let i = 0; i < arr.length; i++){}
块级作用域
简单理解的话就是ES6{}块级作用域替代ES5的立即执行函数(匿名函数)
// 立即执行函数的写法
(function () {
...
...
}());
//块级作用域的写法
{
...
...
}
const
- const声明的是常量,声明后立即初始化不可再次赋值改变。
const a;
a = 1
a //undefined
- 对于符合类型的如{},[],const命令赋值的变量只是地址, 该地址的数据可以改变
const obj = {}
obj.a = 1;
obj.a //1 变量指向的地址的数据可以改变
obj = {} //报错, 这里给变量重新赋值新的地址报错
const arr = [];
arr.push(1); //给变量指向的地址添加数据
arr.length = 0; //给变量指向的地址更改属性
arr = [1,2]; // 报错 变量的地址不可指向其他地址
const的作用域与let命令相同:
1只在声明所在的块级作用域内有效。
2const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。
3const声明的常量,也与let一样不可重复声明。