var与let区别

#tag

var与let区别的笔记

1、作用域不一样。var声明变量,只有函数作用域和全局作用域,没有块级作用域,也就是说可以在代码块{}外部使用。而let可以实现块级作用域,只能在代码块{}内有效,在{}之外不能访问。

1
2
3
4
5
if(1==1){
let a=1
}
//报错
console.log(a)

2、let没有变量提升。ES6明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区” temporal dead zone,简称 TDZ。

1
2
3
//报错
console.log(a)
let a=10

3、let变量不能重复声明。之前用var定义变量,在多人开发一个项目时,比如都定义了一个变量a,但各自用途不同,后面定义的a会把前面定义的覆盖掉,而用let就能解决这个问题,不能重复声明以避免混淆。

1
2
3
4
5
let a=1
let a=10

//报错
console.log(a)

4、循环作用域。在for循环中,不仅循环体{}会生成块级作用域,循环条件()也会生成块级作用域,循环条件()的块级作用域是循环体{}块级作用域的父级作用域,var声明的变量是全局的,包括循环体内与循环体外,let声明的变量作用域只在循环体内,循环体外的变量不受影响。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!