22017


下記で、letはブロックスコープだから、定義する前にリファレンスされるとReferenceErrorが出る、と書かれているのですが、どういう意味でしょうか？  
<http://postd.cc/es6-cheatsheet/>

・ブロックスコープだから？  
・ブロックスコープでなければ、定義前にリファレンスしてもOK？  
・巻き上げは関係ないのでしょうか？  
・ブロックスコープだから変数宣言の巻き上げ自体が行われない？  
・それとも、ブロックスコープの先頭に巻き上げられるから？  
・？？？  
<http://hono-auto.seesaa.net/article/433309850.html>


CC BY-SA 3.0
2016-02-12T02:27:56.827
21992
2016-02-12T14:46:50.247
7886
question
ecmascript-6
letでの変数宣言では巻き上げが行われない？


[MDNの説明](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/let)より引用：

> ECMAScript 6 では let は変数をブロックの先頭へ引き上げます。しかし、その変数を宣言より前で参照することは ReferenceError
> を引き起こします。ブロックの始めから変数宣言が実行されるまで、変数は "temporal dead zone" の中にいるのです。

「巻き上げ(hoisting)は行われるが TDZ; Temporal Dead Zone であるため ReferenceError
となる」が答えかと思います。


CC BY-SA 3.0
2016-02-12T14:46:50.247
22017
2016-02-12T14:46:50.247
49
21992
answer