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」が当たった
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」と表示される。
なんかすっきりしないな。