引用错误,用于使用 let 检查延迟声明的变量

ReferenceError for checking late declared variable with let?

本文关键字:延迟 检查 声明 变量 let 错误 用于 引用      更新时间:2023-09-26

我正在阅读有关let关键字并浏览了以下代码块:

typeof对临时死区 (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因为它总是会给出引用错误呢?
我们需要使用try ... catch块作为typeof的替代品吗?

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

那么如何检查它的typeof因为它总是会给出参考错误呢?

你不能。在声明变量之前访问变量是一个编程错误。

最好的

做法是声明变量,我们将首先使用它或在顶部声明

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

因此,这是从TDZ中删除的最佳方法。

从文档中:

在 ECMAScript 2015 中,let 将变量提升到块的顶部。但是,在变量声明之前引用块中的变量会导致ReferenceError。变量从块开始到声明被处理都处于"临时死区"。

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