関数スコープ

関数のスコープ解決のメモ



いままで気づかなかったんだけど,今月号のWeb+DBPressで

var element = "test";
function foo (a) {
    alert (element);
    for (var i = 0; i < a.length; i++) {
        var element = a[i];
    }
}
foo ([1]);// result : undefined

なコードが出てたんだけど,なんでこうなるんだろう?

もうちょっと単純な例で考える.

var a = 3;
(function () { 
    print ("a : " + a); //exp.1
    var a = 4; //exp.2
    print ("a' : " + a);} ())//exp.3
// result 
// a : undefined
// a' : 4

ああ,そういうことね.

環境内の変数のスコープの解決は実行前に行われる訳なのね.

この場合関数内のexp.2でローカルな"a"が定義されたと解釈されるのね.

だから,exp.1の"a"もローカルな"a"と意味がすり替わるのね.



はは,つーか,こういうアホな書き方しないからわからなかったよ.

ローカルスコープの外側の変数にvarをつけるとか.

"var"をつけるとシンボルを定義しているのかと思ってた.

定義文を明確に分けるものと.

たしかに,そこまでは大体あってる.



でも,これをうまく使うとスコープを動的に解決する方法があるのかもしれない...

ってか学校いかねば.

今日は修論発表会聞いてきます!

いってきます!