0

0

什么是暂时性死区_它与let和const有什么关系

紅蓮之龍

紅蓮之龍

发布时间:2025-12-31 06:31:36

|

438人浏览过

|

来源于php中文网

原创

暂时性死区(TDZ)指块级作用域中从进入作用域到let/const声明执行前变量不可访问的状态;此时读写或typeof检测均抛出ReferenceError,且仅存在于含let/const的最小封闭块内。

什么是暂时性死区_它与let和const有什么关系

暂时性死区(Temporal Dead Zone,简称 TDZ)指的是在块级作用域中,从进入该作用域开始、到 let 或 const 变量实际声明语句执行之前,这一段区域内变量不可访问的状态。只要代码块里用了 let 或 const,它声明的变量就从作用域顶部起被“绑定”,但还没初始化,此时任何读写操作都会触发 ReferenceError

TDZ 是 let 和 const 的固有行为

var 声明的变量存在变量提升:声明和初始化一起被提升,未赋值时默认是 undefined;而 let 和 const 虽然也“声明提升”(即引擎知道变量存在),但初始化不提升——变量在声明语句执行前处于未初始化状态,这就形成了 TDZ。

  • let 声明的变量在 TDZ 内访问会报错,比如 console.log(x); let x = 1;
  • const 同样受 TDZ 约束,而且必须在声明时赋值,否则语法错误
  • 即使用 typeof 检测 TDZ 中的变量,也会报错,不再是返回 "undefined"

TDZ 只存在于块级作用域内

它不是全局或函数作用域特有的概念,而是严格绑定在包含 let/const 的最小封闭块中(比如 {}iffor 块等)。

ModelGate
ModelGate

一站式AI模型管理与调用工具

下载
  • 外部作用域的同名变量不会影响块内 TDZ,块内变量完全屏蔽外部
  • 嵌套块中,每个 let/const 都有自己的 TDZ 起始点(即各自块的开头)
  • 例如:{ console.log(a); let a = 2; } 中,console.log 就落在 a 的 TDZ 内

为什么设计 TDZ?

这是 ES6 主动引入的机制,目的很明确:

  • 避免因变量提升导致的逻辑混乱和隐蔽 bug
  • 强制开发者遵循“先声明、后使用”的清晰顺序
  • 为 const 的不可变语义提供底层保障(不能让 const 在未赋值时被意外读取)

常见误操作示例

这些写法都会触发 TDZ 报错:

  • console.log(foo); let foo = 'bar';
  • typeof bar; const bar = 42;
  • if (true) { console.log(baz); let baz = 10; }

相关专题

更多
es6新特性
es6新特性

es6新特性有:1、块级作用域变量;2、箭头函数;3、模板字符串;4、解构赋值;5、默认参数;6、 扩展运算符;7、 类和继承;8、Promise。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

94

2023.07.17

es6新特性有哪些
es6新特性有哪些

es6的新特性有:1、块级作用域;2、箭头函数;3、解构赋值;4、默认参数;5、扩展运算符;6、模板字符串;7、类和模块;8、迭代器和生成器;9、Promise对象;10、模块化导入和导出等等。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

185

2023.08.04

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

201

2025.12.24

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

711

2023.08.22

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

519

2023.09.20

console接口是干嘛的
console接口是干嘛的

console接口是一种用于在计算机命令行或浏览器开发工具中输出信息的工具,提供了一种简单的方式来记录和查看应用程序的输出结果和调试信息。本专题为大家提供console接口相关的各种文章、以及下载和课程。

409

2023.08.08

console.log是什么
console.log是什么

console.log 是 javascript 函数,用于在浏览器控制台中输出信息,便于调试和故障排除。想了解更多console.log的相关内容,可以阅读本专题下面的文章。

476

2024.05.29

undefined是什么
undefined是什么

undefined是代表一个值或变量不存在或未定义的状态。它可以作为默认值来判断一个变量是否已经被赋值,也可以用于设置默认参数值。尽管在不同的编程语言中,undefined可能具有不同的含义和用法,但理解undefined的概念可以帮助我们更好地理解和编写程序。本专题为大家提供undefined相关的各种文章、以及下载和课程。

3903

2023.07.31

桌面文件位置介绍
桌面文件位置介绍

本专题整合了桌面文件相关教程,阅读专题下面的文章了解更多内容。

0

2025.12.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ECMAScript6 / ES6---十天技能课堂
ECMAScript6 / ES6---十天技能课堂

共25课时 | 1.9万人学习

HTML5/CSS3/JavaScript/ES6入门课程
HTML5/CSS3/JavaScript/ES6入门课程

共102课时 | 6.5万人学习

HTML+CSS基础与实战
HTML+CSS基础与实战

共132课时 | 9.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号