以下のコードを見てください。
var c = 50;
{
console.log(y);
let y = 50;
}
このコードは ReferenceError をスローすると予想されますが、実際にスローされます。しかし、コンソールでは、例外に添付されたメッセージが私の心を吹き飛ばしました。それは言います:
ReferenceError: 初期化前にレキシカル宣言 'c' にアクセスできません
コードc
では、宣言された最初の変数です。エラー メッセージは、 の宣言に問題があることを示していますc
。それは明らかにy
ブロック内の変数であり、例外を引き起こしています。宣言前にusing 宣言された変数を使用することはできませんlet
。たとえば、最初の行で別の変数を宣言するとtest
、エラー メッセージが次のように変わります。
ReferenceError: 初期化前にレキシカル宣言 'test' にアクセスできません
私は何かを見逃していますか、それともバグについて正しいですか? 最新の Firefox Developer Edition (バージョン 49.0a2) を使用しています。
注目に値するもう 1 つのことは、ブロックは単なる囲みブロックであり、関数の本体ではないということです。