関数スコープ
関数のスコープ解決のメモ
いままで気づかなかったんだけど,今月号の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"をつけるとシンボルを定義しているのかと思ってた.
定義文を明確に分けるものと.
たしかに,そこまでは大体あってる.
でも,これをうまく使うとスコープを動的に解決する方法があるのかもしれない...
ってか学校いかねば.
今日は修論発表会聞いてきます!
いってきます!