本次讲解的主要原因是在上上期的作品有略微的提到过,在那段代码中只能使用var来声明变量,不能使用let,可能有的人会想这是为什么呢
所以这起,我们主要讲解一下let与var的区别(本期就不是提const了,如有疑问可以私信或评论哦)
一、let和var的相同点与不同点
1.相同点:
他们在全局作用域中声明的变量是全局变量,在局部变量中声明的变量就是局部变量
2.不同点:
1.let声明的变量不能提升,即涉及不到预解析的问题
2.let声明的变量不能重复声明,var可以重复声明同一个变量(这里又涉及到预解析的问题了)
3.let声明的变量只在当前块作用域有效(可以理解为在let声明的变量在每个大括号内有效)
4.let声明的变量会产生暂时性死区(意思就是let声明的变量只在当前块作用域有效)
二、产生的一些疑问
1.什么是块作用域
块作用域是es6新增的,但怎么区分块作用域呢,简单理解就是当大括号中使用let/const等关键词就会是大括号称为一个块作用域。
通过下面的代码,我们也可以大致区分局部作用域与块作用域的区别了
//首先是用var
if (true) {
var a = 1
}
console.log(a)//1
然后是用let
if (true) {
let a = 1
}
console.log(a)//a is not difined
2.什么是暂时性死区
首先这里有段话,是在es6标准中对let/const声明中解释的一段话
The variables are created when their containing Lexical Environment is instantiated but may not be accessed inany way until the variable’s LexicalBinding is evaluated.
上面这句话的大致意思可以如下
在let/const声明变量之前去使用这个变量,就会报错,在语法上被称为“暂时性死区”;
更简单的理解则是,let/const声明的变量不会提升
console.log(a)//undefined
var a
console.log(a)//a is not defined
let a
从以上的代码也可以看出let并没有提升的效果
此时想必大家也明白了let和var的区别了吧,如果有疑问或感觉哪里有问题的话,可以评论或私信
另外,祝大家元旦快乐!