Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么是暂时的死区?_Javascript_Ecmascript 6_Constants_Let - Fatal编程技术网

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吊装: let、co

我听说在初始化之前访问
let
const
值会导致
ReferenceError
,因为有一种叫做时间死区的东西


什么是暂时死区,它与范围和吊装有什么关系,在什么情况下会遇到这种死区?

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变量,时间死区基本上是一个区域

    “在声明变量之前”

    i、 e如果无法访问这些变量的值,它将抛出一个错误

    上面的代码给出了一个错误

    当我们对变量“a”使用var时,相同的代码不会给出错误


    可能的重复-虽然问题的焦点不在TDZ上,但答案基本上是相同的,所以很有趣:@zeroplagl很好的链接,谢谢。它还说:“foo不是未声明的,它是未初始化的”,这种语言有助于澄清/更正上面的答案<代码>让foo
    进入一个区块,使其被提升并在该区块顶部声明。
    let foo
    行使其初始化。而且
    foo=xyz
    会给它赋值。我认为这是一篇很棒的帖子!然而,我的印象是“let”不受吊装影响?我在Mozilla文档中发现了这一点:我不是想成为一个暴躁的人,我只是好奇,并愿意澄清。@jeows MDN页面仍然说他们没有被提升。如果你真的确定你在说什么,你应该试着编辑一下。我想我应该就此发布一个问题。@joews IMO,您可以说它们已被悬挂,但由于TDZ的原因,在其声明到达之前无法访问它们,或者您可以说它们未被悬挂,但TDZ将导致对它们的任何引用抛出错误。实际上,这两种说法都是同样正确的。除此之外,我认为,您在抽象意义上使用术语“提升”,如“提升=当引擎意识到该变量存在时”。这就是为什么?另外,规范对此有何规定?在第二个示例中,控制台日志生成“NaN”(添加
    未定义的
    5
    )。
    var a
    的声明被挂起,初始化代码设置tng
    a
    到5不被挂起。是的,对,a在没有任何初始化的情况下被挂起。因此a将是未定义的。引用的第一个示例不正确,请更正或删除它。我想还需要指出,
    let
    const
    是块范围,
    var
    是函数范围
    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;