質問: 下記で、letはブロックスコープだから、定義する前にリファレンスされるとReferenceErrorが出る、と書かれているのですが、どういう意味でしょうか? ・ブロックスコープだから? ・ブロックスコープでなければ、定義前にリファレンスしてもOK? ・巻き上げは関係ないのでしょうか? ・ブロックスコープだから変数宣言の巻き上げ自体が行われない? ・それとも、ブロックスコープの先頭に巻き上げられるから? ・???
回答: MDNの説明より引用: > > ECMAScript 6 では let は変数をブロックの先頭へ引き上げます。しかし、その変数を宣言より前で参照することは ReferenceError を引き起こします。ブロックの始めから変数宣言が実行されるまで、変数は "temporal dead zone" の中にいるのです。 > > > 「巻き上げ(hoisting)は行われるが TDZ; Temporal Dead Zone であるため ReferenceError となる」が答えかと思います。