Javascript のスコープ

Javascript のオブジェクトのスコープについて。

下記の例ではグローバル(ウィンドウ)スコープの "a" を取得し、表示している。

var a = "global";

function fn1() {
 alert(a); //global
}

fn1();


メソッドの中に同じ変数名の変数がある時にはまた違った動きを見せた。
var a = "global";

function fn2() {
 alert(a); //undefined
 
 var a = "local";
 alert(a); //local
 
 alert(window.a); //global
}

fn2();

予想では "global" と表示されると思われたところで "undefined" と表示された

このことから推測すると「メソッド内で単に上から処理しているだけ」というわけではないようだ。

2 Comments:

いげ太 さんのコメント...

こんにちは。

この挙動は、「すべての変数は、当該スコープの先頭で生成される(スコープの先頭で宣言されたものとみなされる)」というルールに基づくものですね。

var a = "global";

function fn2() {
var a;
alert(a); //undefined

a = "local";
alert(a); //local

alert(window.a); //global
}

Y@$ さんのコメント...

>スコープの先頭で宣言されたものとみなされる

なるほど~

勉強になりました。有難うございます。

Recent Posts