ES6中的TDS(暂时性死区)

一、什么是暂时性死区?

要知道什么是TDS-Temporal Dead Zone(暂时性死区),先来看一段代码:

03D4E6B4-729A-4527-A945-67C1AA7181E4.png

使用 var 关键字和使用 let 关键字声明变量有什么区别?
为何第一段代码直接报错,第二段却能打印出 undefined?
想要理解这个问题,就需要了解暂时性死区。

之前的文章里,我们讨论过 什么是块级作用域,及 var 声明与 let 和 const 声明的区别。
它们最大的区别是:

  • var 关键字声明的变量创建和初始化会被提升,赋值不会被提升,这个特点表现出来就是我们常见的“变量提升”
  • let 和 const 关键字声明的变量和常量创建会被提升,初始化和赋值都不会被提升,因此文章开头的例子里,会报错“cannot access before initialization”
  • function 的创建、初始化和赋值都会被提升,因此可以在函数声明前执行它

二、为什么会出现暂时性死区?

function foo() {
    // 暂时性死区开始
    console.log(a)
    // 暂时性死区结束
    let a = 1
}
foo()

在这个例子中,执行 foo 函数时,由于 let 声明的变量初始化不会提升,所以在执行到 let a = 1 这行代码前,是无法获取到这个变量的。
因此,在函数的开始到变量 a 的声明语句之间,就形成了一段区域(参考例子中的注释),在这段区域中,获取变量 a 会直接报错。
这个区域就被称为 暂时性死区。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 变量提升 var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined。这种现象多多少少是有...
    Coder_老王阅读 8,714评论 0 7
  • let 命令 基本用法 ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let...
    硅谷干货阅读 315评论 0 0
  • let命令 ES6新增了 let命令,用来声明变量。它的用法类似于var,当然也只是类似,说明它还有其他不同于v...
    YeLqgd阅读 360评论 0 0
  • let 和 const let 声明的变量的作用域是块级的 let 不能重复声明已经存在的变量 let 有暂时死区...
    cctosuper阅读 544评论 0 0
  • 前言 看书学习React && 手动实现书中代后的一周,内心对于ES6、React自身的一些特性很混淆,不知道代码...
    Mokaffee阅读 1,152评论 0 1

友情链接更多精彩内容