Javascript 什么是暂时的死区?
我听说在初始化之前访问Javascript 什么是暂时的死区?,javascript,ecmascript-6,constants,let,Javascript,Ecmascript 6,Constants,Let,我听说在初始化之前访问let和const值会导致ReferenceError,因为有一种叫做时间死区的东西 什么是暂时死区,它与范围和吊装有什么关系,在什么情况下会遇到这种死区?让和const与var有两大区别: 是的 在声明前访问var,结果未定义;在声明之前访问let或const会抛出ReferenceError: console.log(aVar);//未定义 console.log(aLet);//原因引用错误:未定义aLet var aVar=1; 设aLet=2让和const与va
let
和const
值会导致ReferenceError
,因为有一种叫做时间死区的东西
什么是暂时死区,它与范围和吊装有什么关系,在什么情况下会遇到这种死区?
让
和const
与var
有两大区别:
var
,结果未定义
;在声明之前访问let
或const
会抛出ReferenceError
:console.log(aVar);//未定义
console.log(aLet);//原因引用错误:未定义aLet
var aVar=1;
设aLet=2
让
和const
与var
有两大区别:
var
,结果未定义
;在声明之前访问let
或const
会抛出ReferenceError
:console.log(aVar);//未定义
console.log(aLet);//原因引用错误:未定义aLet
var aVar=1;
设aLet=2代码>吊装:
let
、const
、var
都是提升过程。
(这是什么意思?他们往上走,并在范围的顶部声明。)
初始化:
var
也要完成初始过程,并获取未定义的初始值
- 虽然
let
,const
没有抛出初始进程,因此它们的值仍然无法访问,尽管它们已经声明。
是什么让他们进入了时间死区
所以很快:
吊装过程:var
,let
,const
初始化过程:
var
吊装:
let
、const
、var
都是提升过程。
(这是什么意思?他们往上走,并在范围的顶部声明。)
初始化:
var
也要完成初始过程,并获取未定义的初始值
- 虽然
let
,const
没有抛出初始进程,因此它们的值仍然无法访问,尽管它们已经声明。
是什么让他们进入了时间死区
所以很快:
吊装过程:var
,let
,const
初始化过程:
var
对于let和const变量,时间死区基本上是一个区域
“在声明变量之前”
i、 e如果无法访问这些变量的值,它将抛出一个错误
前
上面的代码给出了一个错误
当我们对变量“a”使用var时,相同的代码不会给出错误
前
对于let和const变量,时间死区基本上是一个区域
“在声明变量之前”
i、 e如果无法访问这些变量的值,它将抛出一个错误
前
上面的代码给出了一个错误
当我们对变量“a”使用var时,相同的代码不会给出错误
前
可能的重复-虽然问题不关注TDZ,但答案基本上是相同的可能重复-虽然问题不关注TDZ,但答案基本上是相同的如此有趣:@zeroflagL好链接,谢谢。它还说:“foo不是未声明的,它是未初始化的”,这种语言有助于澄清/更正上面的答案<代码>让foo
进入一个区块,使其被提升并在该区块顶部声明。let foo
行使其初始化。而且foo=xyz
会给它赋值。我认为这是一篇很棒的帖子!然而,我的印象是“let”不受吊装影响?我在Mozilla文档中发现了这一点:我不是想成为一个暴躁的人,我只是好奇,并愿意澄清。@jeows MDN页面仍然说他们没有被提升。如果你真的确定你在说什么,你应该试着编辑一下。我想我应该就此发布一个问题。@joews IMO,您可以说它们已被悬挂,但由于TDZ的原因,在其声明到达之前无法访问它们,或者您可以说它们未被悬挂,但TDZ将导致对它们的任何引用抛出错误。实际上,这两种说法都是同样正确的。除此之外,我认为,您在抽象意义上使用术语“提升”,如“提升=当引擎意识到该变量存在时”。这就是为什么?另外,规格上怎么说?也很有趣:@zeroplagl链接不错,谢谢。它还说:“foo不是未声明的,它是未初始化的”,这种语言有助于澄清/更正上面的答案<代码>让foo进入一个区块,使其被提升并在该区块顶部声明。let foo
行使其初始化。而且foo=xyz
会给它赋值。我认为这是一篇很棒的帖子!然而,我的印象是“let”不受吊装影响?我在Mozilla文档中发现了这一点:我不是想成为一个暴躁的人,我只是好奇,并愿意澄清。@jeows MDN页面仍然说他们没有被提升。如果你真的确定你在说什么,你应该试着编辑一下。我想我应该发布一个关于这个的问题。@joews IMO,你可以说它们已经悬挂,但由于TDZ的原因,在它们的声明到达之前无法访问它们,或者你可以说它们没有悬挂,但TDZ可以访问它们
let sum = a + 5; //---------
//some other code // | ------> this is TDZ for variable a
// |
console.log(sum) //---------
let a = 5;
var sum = a;
console.log(sum) //prints undefined
var a = 5;