- 変数宣言がスコープに入るのは、それが宣言された場所から、その宣言を含む関数の終わりまでであり、ブロックのネストには関係ない
- 名前つき関数がスコープに入るのは、その関数が宣言された関数全体であり、ブロックのネストには関係ない。これを巻き上げと呼ぶ。
- スコープ宣言に関して、グローバルコンテクストは、ページのコードをすべて含む1個の巨大な関数のような役割を果たす
あたりまえだが宣言前の変数はスコープの外。
でもブロックの中にあるかどうかはスコープに関係ないから、
if文の中で宣言されたものはネストの外でもスコープの中である。
ただしouterの外にあっても、innerはスコープ内である。
function outer() { var a = 1; function inner() { /* なにもしない*/ } var b = 2; if (a == 1) { var c = 3; } } outer();