過去の日記

2007-07-19 [長年日記]

関数もまたオブジェクト 続き [hatena][tech]

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回出てくる。

役に立つことだけが学習か [etc]

404 Blog Not Found:怠翻 - プロジェクトがオワタことを告げる102の証拠

昨日、弾さんのこのページを見て、ケラケラ笑っていたのだけど。

ふと思う。その時間は無駄だったのか。
笑うこと、可笑しいと思うこと、その感性。そういうものは役に立たないことのか。
違うだろう。
なんてね。

*1 Javascriptはまともに使ったことが無いのでde factoな表現も公式な表現も知らない。