《前端面试经典》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对于引用类型只是对于他的引用不发生变化(地址),里面的变量变化不会发生错误。