《前端面试经典》01--- var、let、const的区别

45 阅读2分钟

《前端面试经典》01--- var、let、const的区别

在es6之前,我们都是使用var来定义变量的。es6之后,你会发现var定义变量的代码越来越少了,慢慢取代var的是新出的定义变量的let,和const。因为var和let,const相比会有一些问题在我们开发的过程中。主要是以下3个问题:

1、变量提升和暂时性死区

看下面这段代码

console.log(number1)  \\这时候number1还没定义,但是var的变量提升会提前将number1初始化为undefined,所以这里的输出是undefined

var number1 = 1;

这时候number1还没定义,但是var的变量提升会提前将number1初始化为undefined,所以这里的输出是undefined

如果换为let或者const就不会输出undefined,会直接报错 Uncaught ReferenceError: nubmer1 is not defined

这就是var的变量提升和let,const的暂时性死区。let,const更符合我们的开发直觉。

2、作用域

var的作用域是函数级作用域,像是定义在for循环和if块里面的变量,出了还是可以继续访问。 let,const则是块级作用域,所以在for和if块内部定义的出了块就会被回收掉,这样就不会污染全局。

并且var定义的变量是挂载在window这个global变量上面的,let和const则不会挂载上去。

3、重复定义

var定义的变量是可以重复定义的,具体可以看以下代码

var a = 1
var a = 2

console.log(a) \\ 这时候输出的是2

可以看到var可以重复定义变量名字相同的变量,并且不会报错,如果代码过长,可能就会出现变量覆盖的情况。

如果是let或者const呢,就会出现报错。

注:const对于引用类型只是对于他的引用不发生变化(地址),里面的变量变化不会发生错误。