let与var的爱恨情仇(干货篇)

本次讲解的主要原因是在上上期的作品有略微的提到过,在那段代码中只能使用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的区别了吧,如果有疑问或感觉哪里有问题的话,可以评论或私信

另外,祝大家元旦快乐!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值