JavaScript

JavaScriptのスコープわからない

オライリーのJavaScriptの本読んでてスコープのところでつまった。

var scope = “global”;
function f() {
alert(scope);
var scope = “local”;
alert(scope);
}
f();

これをfirebugで実行すると1回目のalertで「undefined」2回目のalertで「local」が表示される。
でも、関数内でvar scopeをコメントアウトすると

var scope = “global”;
function f() {
alert(scope);
//var scope = “local”;
alert(scope);
}
f();

2回とも「global」が表示される。
なんで?
最初のコードの変数scopeは関数外で宣言されてるからundefinedなのはわかるけど、後のコードは関数外のグローバル変数見に行ってもいいの?
———————————————————————————————————————————-
※追記
———————————————————————————————————————————-
コメントとかチャットで色々教えてもらって、たぶんわかった。

var scope = “global”;
function f() {
alert(scope);
var scope = “local”;
alert(scope);
}
f();

こう書いても実行時の解釈は

var scope = “global”;
function f() {
var scope; // 関数内スコープ変数scopeが定義される
[...]

「基礎Ajax+JavaScript」が当たった

「基礎Ajax+JavaScript」が当たった

Recently Ajaxさんに応募したら当たりました。
タイトルにはデカデカとAjaxと書いてあるけど、3分の2ぐらいはJavaScriptを基礎から解説してる。
残り3分の1ぐらいからXMLHttpRequest、RSS、Amazon Webサービス、Googleマップの話が出てくる。
良い機会なのでJavaScriptを基礎からやり直してみる。
懸賞に当たったのなんて久しぶり。

なぜtrue

[js]
var b = new Boolean(false);
if(b) alert(b);
[/js]
実行するとalertで「false」と表示される。
なんかすっきりしないな。