旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

Hello, クロージャ!

2007年4月24日

各所でその名を聞くクロージャですが
今までは他人に熱弁されてもイマイチささりませんでした。

でも、今日のあるタイミングで、言葉ではなく心で理解できた。

その説明 from チャット

# kawadu
Box.prototype.start = function() {
var self = this;
this.id = setInterval(function() { self.move() }, 20);
};
# var self = this ってなんで代入する必要があるのだろう。
# komagata
# いい質問だ
(中略)
# 関数の中から外の変数(this以外)を使うと
# どこもってっても その変数つかえるんだよね
# そういう関数をクロージャっていうらしい。
# setIntervalにクロージャをわたしてんだね

という、見た目より親切なkmgtの説明を聞いたときに
prototype.jsのAjax.Requestを使って、
こんな感じのロジックを書いたことがあるのを思い出した。

var setAjax = function() {
var outside = $("id");// いくつかのHTML要素を見る必要があった
var url = "hoge.php";
var opts = {};
opts.method = "get";
opts.onComplete = function(http) {
outside.innerHTML = http.responseText;
}
new Ajax.Request(url, opts);
};

このonCompleteはクロージャだったんじゃないか!!

当時は動くけど間違っている気がしたので、
考えた末に、結局outsideをグローバル変数にしてしまったよ・・・。
やっていいことだったのかぁ。

理解できる下地があっても
それが概念と結びつくには、何度もくじを買って当てる必要があるんだなぁ。

そのくじは仕事とか勉強とか読書とか読エントリとか休憩だったりしますが、
人の話ってのもくじの一種なので、話を聞くとこういうイイコトもありますね。