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禁止重复声明变量且不存在声明提升