JavaScript Ninjaの極意 という書籍を読んでいます。
その序盤に JavaScript の関数や変数のスコープについての説明がありました。
そこに掲載されていた図が非常に分かりやすかったので、備忘録がてら共有したいと思います。
基本的な内容ですが、他の言語 (僕にとっては Ruby) と比べて少し特殊で忘れてしまいがちですので。
以下の 2 点がポイントだと思います。
- 関数のスコープはそれを含む関数の先頭まで巻き上げ (hoisting) られる。
- 関数 innerBarrier のスコープを参考のこと。
- 変数のスコープはブロックの境界を超える。
- 変数 mami のスコープを参考のこと。