暂时性死区的表现
if (true) {
console.log(value);
let value = 1;
}
Uncaught ReferenceError: Cannot access 'value' before initialization
var:
1、在ES5中是全局变量、顶级变量(指window)
2、存在变量提升的情况
console.log(a) //undefined
var a=10
这段代码将转换成下述
var a
consolse.log(a)
a=10
3、可以重复声明,最终结果为最后一个将前面变量进行覆盖
4、在函数内使用var是局部变量,在函数内直接使用变量为全局变量(无var)
let:
1、let的作用域是块级代码,只在代码块中有效。
2、不存在变量提升(暂时性死区)
3、不允许重复定义
const:
1、const声明一个只读的常量,一旦声明,常量的值就不能改变
2、如果之前用var或let声明过变量,再用const声明同样会报错
3、不存在变量提升(暂时性死区)
这也体现出了let和const的安全性可言