帰ってきたHolyGrailとHoryGrailの区別がつかない日記

はてなブログに帰って来ました

JavaScriptのスコープの話

mattnさんがすでにコメントしているけどコードで書くともっとわかりやすいと思ったので。

最初のコードの変数scopeは関数外で宣言されてるからundefinedなのはわかるけど、後のコードは関数外のグローバル変数見に行ってもいいの?

401 Authorization Required

っていうところなんだけど、この最初のコードの1番目のalertで参照されているのは関数スコープ変数。
コードに直してみるとこんな感じ

var scope = "global";
function f() {
  var scope;       // 関数内スコープ変数scopeが定義される
  alert(scope);    // 関数内スコープ変数が参照されるため、もちろん未定義値(undefined)が返される
  scope = "local"; // 関数内スコープ変数scopeに"local"をセット
  alert(scope);    // local
}
f();

という風に解釈されていると考えると理解もしやすいかも。