var是es5提出的,let、const 是es6提出的,在我们开发中react结合es6基本不使用var来声明变量,如果项目复杂度比较高,代码量比较大,组件的层级结比多,使用var会造成变量覆盖,污染···
那么接下来看看他们的各自的区别:
| var | let | const |
|---|---|---|
| 没有块级(全局window或者函数体内) | 块级作用域(当前代码块) | 块级作用域(当前代码块) |
| 声明可以不赋值(可修改) | 声明可以不赋值(可修改) | 声明的是常量(必须赋值且不能修改) |
| 不存在暂时性死区 | 存在暂时性死区(只能在声明代码块出现才能使用) | 存在暂时性死区(只能在声明代码块出现才能使用) |
| 存在变量的提升(声明前调用出现undefined) | 不存在(声明前调用报错) | 不存在(声明前调用报错) |
🤔️什么是暂时性死区:
console.log(a);
var a = 1;
日志输出:undefined
console.log(a);
let a = 1;
日志报错:
🤔原因分析: ES6新增的let、const关键字声明的变量会产生块级作用域,如果变量在当前作用域中被创建之前被创建出来,由于此时还未完成语法绑定,如果我们访问或使用该变量,就会产生暂时性死区的问题,由此我们可以得知,从变量的创建到语法绑定之间这一段空间,我们就可以理解为‘暂时性死区’