失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > JS 暂时性死区

JS 暂时性死区

时间:2022-09-16 03:42:05

相关推荐

JS 暂时性死区

ES6 规定,如果代码区块中存在letconst命令声明的变量,这个区块对这些变量从一开始就形成了封闭作用域,直到声明语句完成,这些变量才能被访问(获取或设置),否则会报错ReferenceError。这在语法上称为“暂时性死区”(英temporal dead zone,简 TDZ),即代码块开始到变量声明语句完成之间的区域。

1、通过var声明的变量拥有变量提升、没有暂时性死区,作用于函数作用域:

当进入变量的作用域(包围它的函数),立即为它创建(绑定)存储空间,立即被初始化并被赋值为undefined当执行到变量的声明语句时,如果变量定义了值则会被赋值

(function fn() { //函数作用域开始console.log(temp) //undefined//声明var temp console.log(temp) //undefined//赋值temp = 123console.log(temp) //123})()//在函数作用域外访问console.log(temp) //ReferenceError: temp is not defined

2、通过let声明的变量没有变量提升、拥有暂时性死区,作用于块级作用域:

当进入变量的作用域(包围它的语法块),立即为它创建(绑定)存储空间,不会立即初始化,也不会被赋值访问(获取或设置)该变量会抛出异常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

3、通过 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

如果觉得《JS 暂时性死区》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。