ES6中的 var、let、const 的区别

本文探讨了JavaScript中的let和const关键字,详细解释了它们与var的主要区别。let提供了块级作用域,避免了变量提升,且在同一作用域内不允许重名。const同样具有块级作用域,但其值一旦初始化后不可更改。此外,文章还介绍了暂存死区的概念,强调了正确使用let和const对于提升代码质量的重要性。
摘要由CSDN通过智能技术生成

前言

前段时间,发现js中有人在用let。本人茫然了,这是个啥,js中定义变量我只认识 var 。
后来才发现,自己真是out了。(也可能之前接触的都是 ECMA5,汗颜!!!)

不过,不想学习,一直吃老本的程序员,不是好程序员。我决定,好好看看这块的东西。那么,第一步就是这let了。查了下资料,我才发现原来这 ES6我还真就接触过,在 Vue 中,const 定义的那么多变量…
话不多少,开整!

let 的特点

首先,它是用来定义变量的。那就先是试试呗~

1、声明变量在同一个代码块{}中不能重名

如下案例中,定义第二个变量,取名做 a 时,就报错了。

let a = 5;
// 当解析到第二个a时,会报错
// Uncaught SyntaxError: Identifier 'a' has already been declared
let a = 6;

2、虽然属于块级作用域,但是仍遵循作用域链

如下案例中,在函数 printB 中使用 b 变量,是不会报错的。这一点可以体现 let 定义的变量是遵循作用域链的。
但是在 let 的块{} 外边使用 b 变量时,却是会报错,提示说该变量未定义。

但是,var 只有全局作用域和函数作用域概念

{
     let b = 9;
     function printB(){
         console.log(b);
     }
     printB();
 }
     // Uncaught ReferenceError: b is not defined
     console.log(b);

3、let 定义的变量不存在变量提升

所谓变量提升,简单来说,其实是 js 在执行的时候,是将声明变量和给变量赋值分开的。
先执行所有的声明,再执行赋值。
这一点可以和 var 定义的变量做比较来看。

let 的案例:先使用变量 c ,然后在给 c 赋值,这种是办不到的。

{
      // 不存在变量提升
      // Uncaught ReferenceError: Cannot access 'c' before initialization
      // console.log(c)
      let c = 'IloveU'
}

var 定义的变量是可以变量提升的,也就是以下情况:
控制台会输出 “我真帅”

d = '我真帅'
var d
console.log(d)

但是,如果直接就打印输出 d 的话,会是 undefined 。

综上所述,let 几乎可以取代 var 了,在使用时,需要尽可能选择作用域小,而同时又能满足我们的需求的方式。

const 的特点

const 在作用域上来看,和 let 是一样的,都属于块级别,都不存在变量提升。

const 在同一代码块(同一作用域下),是不能重名的。(这一点 var 是可以重名的)

但是,const 又有它自己的特殊的地方:

const 定义的是常量,即一开始必须赋初值(不能用null做初值)而且该值不可改变,特殊的,如果是对象类型,不在不可改变的范畴,对象的属性还是可以改的。

const 的本质:在定义普通变量时,就和定义一个常量一样;在定义对象、数组时,实际上相当于一个指针指向一个固定的内存地址,该地址存放的数据可以改变,但地址不能变。
一个通俗的例子,将这地址假设为你家的地址,你家地址不能变。可是你家里的家具,人数都是可以变的。
另外请参见:阮一峰 let 详述

暂存死区

这暂存死区,其实主要还是 let 的作用域,以及变量就近原则的问题。
以下案例中,在{}中,e定义的变量是先找 let 定义的,而let 又不能变量提升,因此报错。

var e = 6;
{
    // Uncaught ReferenceError: Cannot access 'e' before initialization
    e = 10;
    let e = 1
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

你家宝宝

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

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

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

打赏作者

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

抵扣说明:

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

余额充值