let、var、const的异同主要有以下几点:
1. var 可以声明前置
a = 3
var a
var a =4
2.let 不可声明前置
a = 5
let a //报错
image.png
3.var可以重复声明,let不可重复声明
image.png image.png4.let存在块级作用域,var则没有。
image.png函数外不能够访问函数内的变量,而var则不存在这种情况
image.png5.let存在暂时性死区(TDZ):在let声明变量之前都是该变量的死区,在死区内该变量不可使用。看不懂不要紧,看下面的例子。
先看var的这段代码会输出什么?
console.log(a);
var a = 12;
如果你了解变量预编译过程,变量提升,那么很容易就会知道,这段代码相当于:
var a
console.log(a)
因此,会输undefined.
image.png
而在ES6中,使用let命令,会产生什么样的结果呢?
alert(a)
let a = 12
浏览器会直接报错,这就是let的暂时性死区
image.png
alert(a);//TDZ暂时性死区
let a = 12;//TDZ结束
对TDZ期间中的变量/常量作任何的访问动作,一律会抛出错误。
6.适用于let的同样适用于const
7.const声明的变量不可改变
const a = 1
a = 2 //报错
const obj = {a: 1}
obj.a = 2 //没问题
obj = {a: 2} //报错
网友评论