JavaScript での時間デッド ゾーン (TDZ) とホイスティング:
例:
console.log(myVar); // 未定義
console.log(myLet); // ReferenceError: 初期化前に 'myLet' にアクセスできません
var myVar = 5;
let myLet = 10;
上記の例では、myVar は var を使用して宣言されているため、ホイストされ、未定義に初期化されます。ただし、myLet は宣言されるまで時間的デッド ゾーンにあるため、宣言前にアクセスしようとすると ReferenceError がスローされます。
TDZ に関する重要なポイント:
let または const を使用して宣言された変数は、ホイストされていても、ブロック スコープ内で宣言される前はアクセスできません。
これにより、明示的に初期化される前に変数を使用することができなくなります。
例:
console.log(myVar); // 未定義
var myVar = 5;
上記の例では、myVar の宣言が先頭に巻き上げられていますが、初期化 (myVar = 5) は書き込まれた場所に残ります。そのため、初期化前に console.log(myVar) が呼び出される場合、unknown が返されます。
var、let、const、関数のホイスティング:
var: var で宣言された変数はホイストされ、unknown で初期化されます。
console.log(myVar); // 未定義
var myVar = 10;
let と const: let と const で宣言された変数はホイストされますが、初期化されません。これらは初期化されるまで TDZ に残ります。
console.log(myLet); // ReferenceError
let myLet = 20;
関数宣言: 関数宣言は完全にホイストされます。つまり、コード内で関数が宣言される前でも関数を呼び出すことができます。
myFunc(); // 「こんにちは!」
関数 myFunc() {
console.log("こんにちは!");
}
ホイスティングと TDZ の主な違い:
ホイスティングにより、変数と関数の宣言がスコープの最上位に持ち上げられます。
一時的なデッド ゾーンは let、const、class で発生します。変数はホイストされますが、初期化されるまでアクセスできません。これにより、宣言前に変数にアクセスできなくなります。
以上がJavaScript での時間的デッド ゾーン (TDZ) とホイスティング:の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。