web-dev-qa-db-ja.com

一時的なデッドゾーンとは何ですか?

初期化される前にletconstの値にアクセスすると、temporal dead zoneと呼ばれるものが原因でReferenceErrorが発生する可能性があると聞きました。

一時的なデッドゾーンとは何ですか、スコープと巻き上げにどのように関係し、どのような状況で遭遇しますか?

125
joews

巻き上げ:
letconstvarはすべてホイストプロセスになります。
(どういうことかというと、上位になり、スコープの最上部で宣言します。)

初期化:

  • varも初期プロセスをスローし、undefinedの初期値を取得します。
  • 一方、letconstは初期プロセスをスローしなかったため、それらの値は既に宣言されていてもアクセスできません。何がtemporal dead zoneにそれらを入れます

つまり、すぐに:

巻き上げプロセス:varletconst
初期化プロセス:var

2
ofir_aghai

Let変数とconst変数の場合、基本的に、Temporal Dead Zoneはゾーンです

「変数が宣言される前」、

つまり、これらの変数の値にアクセスできない場合、エラーがスローされます。

例.

let sum = a + 5;        //---------
//some other code       //         | ------>  this is TDZ for variable a
                        //         |
console.log(sum)        //---------
let a = 5;

上記のコードはエラーになります

変数 'a'にvarを使用しても同じコードはエラーになりません。

例.

let sum = a + 5;                            
console.log(sum)     //prints 10
var a = 5;
0