JavaScript中var 和let的区别,四个概念变量提升,作用域,重复声明,暂时死区以及从生命周期去看它

本文详细对比了JavaScript中var与let两种变量声明方式的不同之处,包括变量提升、作用域特性、重复声明以及暂时死区等方面,帮助读者深入理解两者之间的差异。

前言

今天无意当中遇到了js中的变量声明,发现除了var居然还有let声明方法,比较新奇,特地记录下来它们两者的区别!绝对能让你理解清楚,PS 后面有重头戏

思路

主要从四个角度来讲述它们的区别

  • 变量提升
  • 作用域
  • 重复声明
  • 暂时死区

变量提升

概念:
  变量的声明会被提升到函数的最顶部,也就是说,可以先使用 再声明。var 可以 let不可以。

a = 1;
var a;
console.log(a);  //1 

b = 1;
let b ;
console.log(b);  // 引用报错

这里写图片描述

但是变量的初始化 是不能提升的!对var和let处理的方式也是不一样的。

console.log(a);  // undifined
console.log(b);  // 引用报错

var a = 1;
let b = 2;

作用域

概念:
  var 的作用域不是块级的,也就是说,在一个地方声明,所有的地方都能对它进行读取,而let是块级的

{
    var c =1;

}
{
    let d = 2;
}
console.log(c);  // 1
console.log(d);  // 引用报错
var a = 1;
{
    var a = 2;
}

let b = 1;
{
    let b = 2;
}
console.log(a);  // 2
console.log(b);  // 1

为了更好的理解,我们直接用{}来表明我们的作用域,可以看到,在{}之外依然能访问var变量而不能访问let变量。

重复声明

概念:
  var变量能够重复声明,而let变量是无法重复声明的。

var a = 1;
var a = 2;
let c = 1;
let c = 2;  // 报错

暂时死区

知道了变量提升之后,我们可以了解一下暂时死区

console.log(a);  // undefined
console.log(b);  // 引用报错
var a;
let b;

主要就是,生命周期不一样,var变量声明和初始化一起的,而let声明和初始化是分开的,声明和初始化中的区域就叫暂时死区。具体的可以参考这篇声明周期的文章,不再多说了。
声明周期理解的链接

更进一步

原链接:(https://zhuanlan.zhihu.com/p/28140450)
它主要讲的是 var 和 let在for循环中的问题,可以看看,还有let是否真的是不能提升。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河海哥yyds

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值