変数は表示されますか?
重要度: 4
このコードの結果はどうなりますか?
let x = 1;
function func() {
console.log(x); // ?
let x = 2;
}
func();
追伸 このタスクには落とし穴があります。解決策は明らかではありません。
結果は: エラーです。
実行してみる
let x = 1;
function func() {
console.log(x); // ReferenceError: Cannot access 'x' before initialization
let x = 2;
}
func();
この例では、「存在しない」変数と「初期化されていない」変数の特異な違いを確認できます。
記事変数スコープ、クロージャーで読んだように、変数は、実行がコードブロック(または関数)に入った瞬間から「初期化されていない」状態から始まります。また、対応するlet
ステートメントがあるまで初期化されません。
言い換えれば、変数は技術的には存在しますが、let
の前に使用することはできません。
上記のコードはそれを示しています。
function func() {
// the local variable x is known to the engine from the beginning of the function,
// but "uninitialized" (unusable) until let ("dead zone")
// hence the error
console.log(x); // ReferenceError: Cannot access 'x' before initialization
let x = 2;
}
この変数が一時的に使用できなくなるゾーン(コードブロックの最初からlet
まで)は、「デッドゾーン」と呼ばれることがあります。