let 和 const 命令 ---ES6。

本文介绍了ES6中新增的变量声明方式,包括let和const,对比了它们与var的区别。var存在变量提升和可重复声明,而let和const则有块级作用域和暂时性死区。const声明的变量值不可改变,且在同一作用域内不可重复声明。此外,还提到了typeof在ES6后的安全性问题。
摘要由CSDN通过智能技术生成

总所周知,在 ES6 之前,只有两种声明变量的方式,分别是:var 命令和 function 命令。ES6 新增了四种声明变量的方式,分别是 let ,const ,import 和 class 命令。

1、首先我们来看一下 var 命令,var 命令有那些特点呢?

  • 存在变量提升 (可以先使用,后声明)
    • 未声明的情况下,直接使用会报错
      未定义变量a,直接使用会报错

    • 使用 var 命令声明的情况(先使用后声明,不会报错,只会输出 undefined):
      在这里插入图片描述

    • 为什么会存在变量提升?

      • 首先我们要知道,Js 在拿到 变量 和 函数时,会有两步操作:解析 与执行。
      • 在解析阶段,Js 会检查语法,会对函数进行预编译,在预编译的时候,会将 var 声明命令的代码全部提至最上面先进行声明,用代码来理解的话 如下:
        在这里插入图片描述
      • 执行阶段没什么好讲的,就是逐条解释每条语句并执行
      • 至于为什么要进行变量提升,还有变量提升的优点是什么,这里就不细讲了。想了解的小伙伴可以自行百度~
    • 在浏览器中会声明成 window 对象的属性。
      存在于封闭作用域

    • 在代码中存在于 function 代码块中(此处使用 es6 的模版字符串)
      外层输出a,会报错未定义

  • 可重复声明
    在这里插入图片描述

2、 let 命令 和 const 命令的共同点

  • 不存在变量提升(其实存在,后文会说)

    • let 和 const 不存在变量提升。
      在这里插入图片描述
      在这里插入图片描述
  • 作用域为块级作用域

    • 在es6之后才有块级作用域这一说,可以理解为:一个 { } 之内。
      在这里插入图片描述
      在这里插入图片描述
  • 暂时性死区

    • ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。
      在这里插入图片描述
  • 不可重复声明

    • 在同一个作用域中,let 和 const 是不允许同一个变量名重复声明的!
      在这里插入图片描述

3、const 命令的独立特点 (const 是 常量)

  • 值不可改变(注意,引用类型只能保证栈区的地址不变,不能保证堆区存放的数据不被改变)
    在这里插入图片描述
    课外题点:
    typeof 这个判断类型,在 es6 没出之前是绝对安全的,因为如果不用命令声明的变量在以前默认是 var 命令 默认值为 undefined,所以永不会报错,但是现在因为 let 和 const 的暂时性死区问题,已经变得不安全了、
    在这里插入图片描述

觉得有点卵用就给个赞吧 QAQ

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值