为什么要用let代替var
1、let代替var的原因
JavaScript的ES6标准中提出了用let来声明变量, 用let来代替var来声明变量的原因是var在使用过程中存在一些问题, 这些问题在实际项目中会造成不小的麻烦, var的问题简单总结如下:
- 声明提升
- 没有块级作用域(var是函数级作用域)
- 声明覆盖
2、详解var存在的问题
声明提升
所谓的变量提升(Hoisting)就是:在任何作用域中使用var声明的变量,都会被提升到其作用域最顶部,也就是说该变量的作用域相当于其函数或者全局,但是其赋值操作还是在原先的位置。示例代码如下:
console.log(name); // undefined
var name = "wyb";
var存在声明提升, 而let不存在, 如果是用let上述代码会报错。在实际项目中如果用var的话不小心使用了后面声明的变量也不会报错, 这是比较麻烦的事情。
没有块级作用域
var的作用域是函数作用域 而不是像let那样的块级作用域。
for (var i = 0; i < 5; i++) {}
console.log(i); // 5
上述代码如果是使用let就会直接报错。
声明覆盖
使用var可以重复声明一个变量, 如下:
var a = 333;
var a = 123;
console.log(a); // 123
如果是使用的let上述代码就会报错, 在大型项目中var难以解决开发人员的变量重命名问题, 建议使用let代替var, 这样就不必担心声明覆盖问题了。
3、总结(let和var的区别)
- var的作用域为方法作用域, var可以重复声明变量且存在声明提升
- let的作用域为块级作用域, let禁止重复声明变量且不存在声明提升