ES6变量
变量声明
var (函数作用域):可以重新赋值,重新定义
let (块级作用域): 不能重新声明,可以修改
const (块级作用域):不能重新声明,不能修改–常量
<script>
// var 是全局变量,
for(var i = 0; i < 10 ; i++ ){
console.log(i);//因为是全局变量,在执行之后i= 10
}
for(let i = 0; i < 10 ; i++){
console.log(i);
setTimeout(function(){
console.log(i);//let 是块级,i=0,1,2,3...9
},1000)
}
</script>
变量提升
var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined。这种现象多多少少是有些奇怪的,按照一般的逻辑,变量应该在声明语句之后才可以使用。
为了纠正这种现象,let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。let没有变量提升
console.log(fo);//输出undefined
var fo = 3;
console.log(ba);//报错ReferenceError
let ba = 1;
暂时性死区
ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区“简称TED
if (true) {
// TDZ开始
tmp = 'abc'; // ReferenceError
console.log(tmp); // ReferenceError
//在没有声明变量之前tmp都是错误的
let tmp; // TDZ结束
console