ES6学习笔记01 -- 暂时性死区 ( temporal dead zone )
2019-11-17 15:43
1901 查看
参考文档: let 和 const 命令 - ECMAScript6入门
理解ES6中的TDZ(暂时性死区)
注:文中代码仅作示意,复制运行时需要适当调整
ES6 规定,如果代码区块中存在 let 和 const 命令声明的变量,这个区块对这些变量从一开始就形成了封闭作用域,直到声明语句完成,这些变量才能被访问(获取或设置),否则会报错ReferenceError。这在语法上称为“暂时性死区”(英temporal dead zone,简 TDZ),即代码块开始到变量声明语句完成之间的区域。 通过 var 声明的变量拥有变量提升、没有暂时性死区,作用于函数作用域:- [li]当进入变量的作用域(包围它的函数),立即为它创建(绑定)存储空间,立即被初始化并被赋值为 undefined
- 当执行到变量的声明语句时,如果变量定义了值则会被赋值
(function fn() { //函数作用域开始 console.log(temp) //undefined //声明 var temp console.log(temp) //undefined //赋值 temp = 123 console.log(temp) //123 })() //在函数作用域外访问 console.log(temp) //ReferenceError: temp is not defined
通过 let 声明的变量没有变量提升、拥有暂时性死区,作用于块级作用域:
- [li]当进入变量的作用域(包围它的语法块),立即为它创建(绑定)存储空间,不会立即初始化,也不会被赋值
- 访问(获取或设置)该变量会抛出异常 ReferenceError
- 当执行到变量的声明语句时,如果变量定义了值则会被赋值,如果变量没有定义值,则被赋值为undefined
{ //函数作用域开始,TDZ开始 console.log(temp) //ReferenceError: temp is not defined //声明 let temp console.log(temp) //ReferenceError: Cannot access 'temp' before initialization //赋值 temp = 345 //TDZ结束 console.log(temp) //345 //块级作用域结束 } //在块级作用域外访问 console.log(temp) //ReferenceError: temp is not defined
通过 const 声明的常量,需要在定义的时候就赋值,并且之后不能改变,暂时性死区与 let 类似。
{ //作用域开始,TDZ开始 console.log(temp) //ReferenceError: temp is not defined //声明并赋值 const temp = 789 //TDZ结束 console.log(temp) //789 //给常量赋值 temp = 987 //TypeError: Assignment to constant variable //作用域结束 } //在作用域外访问 console.log(temp) //ReferenceError: temp is not defined
一句话总结:在块级作用域中, let 和 const 声明的变量、常量在声明语句执行完成之前不能访问(包括声明语句本身)。 另外,容易因为 暂时性死区 而出错的细节代码在此不展开举例,参考文档中有详情举例。 附:第一次写学习笔记,写随笔花费的时间比学习相关内容的时间还要长,感觉有点本末倒置,不过以后回头看应该会觉得有所值得吧!
相关文章推荐
- ES6学习——新的语法:Temporal Dead Zone(TDZ)
- ES6中的let和const ,块级作用域——暂时性死区问题
- es6学习之路(2):作用域,不存在变量提升,避免暂时性死区,与全局对象的属性脱钩
- 关于 typeof 的暂时性死区,了解一下
- 理解es6中的暂时性死区
- ES6 let 的暂时性死区
- ES2015 ——let命令的暂时性死区
- 理解ES6中的TDZ(暂时性死区)
- ShadowGun Deadzone 放出 GM Kit Mod 包
- var、let 及 const的区别(暂时性死区和提升)
- 暂时性死区常见问题
- arm trustzone
- Linux内存管理 —— 为buddy做准备:MMU, TLB, ZONE
- Angular build Error:In this configuration Angular requires Zone.js
- CTAP: Complementary Temporal Action Proposal Generation (ECCV2018)
- mysql的时区错误问题: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one
- Zabbix配置Web页面报错" PHP time zone unknown Fail"
- 解决错误The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized等
- java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more