- 2008-05-31 (土)
- 技術
closure関数の戻り値の無名関数(method)を実行するとまず無名関数内にiという変数があるか確かめる。
自分自身にもっていないのでスコープチェーンで上位のclosure関数を見に行きi変数があるのでそれをインクリメントしてアラート。
closure関数から飛び出た無名関数内でi変数をいつまでも参照しているので、オブジェクトは破棄されない。やった〜。
そしてclosure関数をもう一度呼び出してクロージャを取得し、同じことを実行するとさっきまで使っていたクロージャとは別のスコープだということが分かる。
当たり前と言えば当たり前なのだが、関数ごとにCallオブジェクトが作られるので別々のクロージャ空間とも言うべきスコープになる。
これってActionScriptにもあるのかな?
function closure(x) {
var i = x;
return function test() {
i++;
alert(i);
}
}
var method = closure(10);
//11
method();
//12
method();
var method2 = closure(20);
//11
method2();
//12
method2();
【関連する記事】
- Newer: Javaの年表
- Older: window.window.window.windowはwindowオブジェクト
Comments:0
Trackback:0
- TrackBack URL for this entry
- http://hisasann.com/cgi-bin/mt/mt-tb.cgi/1024
- Listed below are links to weblogs that reference
- クロージャのスコープは関数オブジェクト単位だよ from HouseTect, JavaScripter Blog

