ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块生效。
let:
1、代码块作用域
{
let a = 10;
car b = 20;
}
a // ReferenceError: a is not defined.
b // 20
2、for循环的计数器,就很合适使用ley命令。
3、不存在变量提升,如果使用var有变量提升的概念
4、暂时性死区
var temp = 123;
if(true){
temp = '123';
let temp;
}
存在全局变量temp,但是块级作用域内let又声明了一个局部变量temp,导致后者绑定这个块级作用域,所以在let声明变量前,对temp赋值报错。
ES6明确规定,如果区块存在lei和const命令,这个区块对这些命令声明的变量,从一开始就形成封闭作用域。凡是在声明之前就使用这些变量,就会报错。
const:
1、声明一个只读的常量。一旦声明,常量的值就不能改变。
2、const的作用域与let命令相同:只在声明所在的快级作用域内生效。
3、const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。
const foo = {};
foo.prop = 123;
foo.prop //123
const a = [];
a.push('Hello');
a.length = 0;
4、从ES6开始,全局变量将逐步与顶层对象的属性脱钩。
var a = 1;
window.a //1
let b = 2;
window.b //undefined