"В стандарте ECMAScript 2015 переменные, объявленные оператором let, переносятся в начало блока. Но если вы сошлетесь в блоке на переменную, до того как она объявлена оператором let, то это приведет к выбросу исключения ReferenceError, потому что переменная находится во “временной мертвой зоне” с начала блока и до места ее объявления. (В отличии от переменной, объявленной через var, которая просто будет содержать значение undefined)"
идиотское поведение. баба яга против. и парсер против. и я против.