2007-07-19 [長年日記]
■関数もまたオブジェクト 続き
javascriptに関する質問です。
http://q.hatena.ne.jp/1184576878
そうか。fugaを普通の関数の形式で書いたのが良くなかったか。
a=10; function hoge(){ var a=1; var huga = function(){alert(a)}; setTimeout(huga, 1000); a++; } hoge();
これで"2"が表示される。
hogeの実行で作られた"無名の関数"のオブジェクト*1がfugaに代入される。
このオブジェクトはhogeの実行後も存在する。少なくともsetTimeoutによる遅延されて実行されるまでは。
fugaが参照している a もまたhogeの実行後も存在する。
この a は正確には hoge.a なわけだ。
そうか。
a=10; function hoge(){ var a=1; var huga = function(){alert(a)}; setTimeout(huga, 1000); a++; } hoge1 = new hoge(); hoge2 = new hoge();
とすると、1回目のhogeと2回目のhogeの実行で、別々の a が確保されることがより判りやすくなるな(hoge1.a と hoge2.a だということがはっきり意識できる!)。
ちなみにこれだと"2"が2回出てくる。
■役に立つことだけが学習か
昨日、弾さんのこのページを見て、ケラケラ笑っていたのだけど。
ふと思う。その時間は無駄だったのか。
笑うこと、可笑しいと思うこと、その感性。そういうものは役に立たないことのか。
違うだろう。
なんてね。
*1 Javascriptはまともに使ったことが無いのでde factoな表現も公式な表現も知らない。