jsの詳細なes6 let TDZ(一時的なデッドゾーン)

一時的なデッドゾーンの理由:

ES6ブロック内にletandconst文( )がある場合注意:let、const语句不存在变量提升、これらのコマンドに対してこのブロックで宣言された変数は最初から閉じたスコープを形成することが明確に規定されています。宣言前にこれらの変数を使用すると、エラーが発生します

例えば:

//场景一:
var a = 10;
function b() {
    
    
    console.log(a);
    let a = 20;
}
b();  // Uncaught ReferenceError: Cannot access 'a' before initialization 初始化前无法访问“a”
console.log(a);

関数 b で a を定義するために let があり、変数a が宣言される前に前の console.log(a); を使用すると一時的なデッド ゾーンが発生するため、ここではエラーが報告されます。

//场景二:
  // TDZ开始
  a = 'abc'; // ReferenceError
  console.log(a); // ReferenceError

  let a; // TDZ结束
  console.log(a); // undefined

  a = 123;
  console.log(a); // 123

ここでエラーが報告されます。letコマンドが変数を宣言する前はa、変数はa変数の「一時的なデッド ゾーン」に属しています。

//场景三:
  let a = a  // ReferenceError

上記のコードによって報告されるエラーも、一時的なデッド ゾーンが原因で発生します。宣言された変数を使用する場合let、宣言が完了する前に変数が使用されている限り、エラーが報告されます。上の行はこの状況に属します。a変数の宣言文が実行される前にa値が取得されるため、エラーが発生します" Cannot access 'a' before initialization"

拡張: 一時的なデッド ゾーンを引き起こすその他の現象:

let/constキーワードが表示される前は、typeof演算子は 100% 安全でしたが、今後は一時的なデッド ゾーンも発生します。キーワードがimportパブリック モジュールを導入したり、 を使用したりnewclassクラスを作成したりする方法と同様に、一時的なデッド ゾーンも発生します。その理由は、変数の宣言と使用の順序

上記のキーワードとは逆にvarfunctionなどのキーワードTDZは(一時的な不感帯)の影響を受けず、変数が共通化される前にアクセスされた場合は、undefined変数昇格があるため結果が返されます。

おすすめ

転載: blog.csdn.net/qq_44094296/article/details/125390773