一時的デッドゾーン

2439 ワード

ES 6は、ブロックに`let`と`const`コマンドが存在する場合、このブロックがこれらのコマンドに対して宣言する変数は、最初から閉鎖的な役割ドメインを形成することを明確に規定している.宣言する前にこれらの変数を使用すると、エラーが発生します.
要するに、この変数は、コードブロック内で`let`コマンドを使用して変数を宣言するまで使用できません.これを文法的には「一時的デッドゾーン」(temporal dead zone、TDZ)と呼ぶ.
if (true) {
// TDZ  
tmp = 'abc'; // ReferenceError
console.log(tmp); // ReferenceError

let tmp; // TDZ  
console.log(tmp); // undefined

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

typeof x; // ReferenceError
let x;

typeof undeclared_variable // "undefined"
}

 
上記のコードでは、letコマンドが変数tmp,xを宣言する前に、変数tmp,xの「デッドゾーン」に属します.この変数を用いる限り、エラーが報告される.
undeclared_variableは存在しない変数名で、結果は「undefined」を返します.
function bar(x = y, y = 2) {
return [x, y];
}

bar(); //   

 
上記のコードでは、bar関数を呼び出してエラーを報告した(一部の実装ではエラーを報告しない可能性がある)のは、パラメータxのデフォルト値が別のパラメータyに等しいためであり、このときyはまだ宣言されておらず、「デッドゾーン」に属している.yのデフォルト値がxであれば、エラーは報告されない.このときxはすでに宣言されているからである.
function bar(x = 2, y = x) {
return [x, y];
}
bar(); // [2, 2]

 
以上より抜粋http://caibaojian.com/es6/let.html