用于检查延迟声明的变量的ReferenceError?

时间:2016-02-03 19:07:22

标签: javascript ecmascript-6

我正在阅读有关let个关键字的信息并完成了此代码块:

typeof与Temporal Dead Zone(TDZ)变量的行为不同于未声明(或声明!)变量的行为。例如:

{
    // `a` is not declared
    if (typeof a === "undefined") {
        console.log( "cool" );
    }

    // `b` is declared, but in its TDZ
    if (typeof b === "undefined") {     // ReferenceError!
        // ..
    }

    // ..

    let b;
}

那么如何检查typeof,因为它总会给出ReferenceError?
我们是否需要使用try ... catch块作为typeof的替代?

  {
    try {
      console.log(typeof(b));
    } catch (e) {
      console.log(e);
    }
    let b;
  }

3 个答案:

答案 0 :(得分:2)

  

那么怎么能检查它的typeof,因为它总会给出ReferenceError?

你做不到。在声明它们之前访问变量是一个编程错误。

答案 1 :(得分:0)

最好的做法是将变量声明为我们首先使用它或在顶部声明

let b;
if (typeof b === "undefined") {     //No  ReferenceError!
    // ..
}

所以,最好从TDZ中删除。

答案 2 :(得分:0)

来自文档:

  

在ECMAScript 2015中,让我们将变量提升到块的顶部。 但是,在变量声明之前引用块中的变量会导致ReferenceError 。变量位于"暂时死区"从块的开始直到处理声明。

因此,在您的代码中,您尝试访问尚未声明的var。