by shigemk2

当面は技術的なことしか書かない

JavaScript Ninjaの極意 3 スコープ


  • 変数宣言がスコープに入るのは、それが宣言された場所から、その宣言を含む関数の終わりまでであり、ブロックのネストには関係ない
  • 名前つき関数がスコープに入るのは、その関数が宣言された関数全体であり、ブロックのネストには関係ない。これを巻き上げと呼ぶ。
  • スコープ宣言に関して、グローバルコンテクストは、ページのコードをすべて含む1個の巨大な関数のような役割を果たす

あたりまえだが宣言前の変数はスコープの外。
でもブロックの中にあるかどうかはスコープに関係ないから、
if文の中で宣言されたものはネストの外でもスコープの中である。
ただしouterの外にあっても、innerはスコープ内である。

function outer() {
  var a = 1;

  function inner() { /* なにもしない*/ }

  var b = 2;
  if (a == 1) {
    var c = 3;
  }
}

outer();