Взгляните на приведенный ниже код:
var c = 50;
{
console.log(y);
let y = 50;
}
Этот код должен вызывать ReferenceError, и он делает это. Но в консоли сообщение, прикрепленное с исключением, просто взорвало мой разум. В нем говорится:
ReferenceError: не удается получить доступ к лексическому объявлению 'c' перед инициализацией
В коде c
объявлена первая переменная. Сообщение об ошибке указывает, что что-то не так с объявлением c
. Это явно переменная y
внутри блока, вызывающая исключение. Мы не можем использовать переменные, объявленные с помощью let
до его объявления. Когда я объявляю другую переменную в первой строке, скажем test
, сообщение об ошибке изменяется на:
ReferenceError: не удается получить доступ к лексическому объявлению 'test' перед инициализацией
Я что-то упустил или я прав об ошибке? У меня есть последняя версия Firefox Developer Edition (версия 49.0a2).
Еще одна вещь, заслуживающая внимания, состоит в том, что блок является просто закрывающим блоком, а не телом функции.